2017-01-29 3 views
1

Как я могу сгенерировать метод со следующей подписью?JavaPoet Generic Parameter

public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type) 

ответ

2

Использование TypeVariableName вместе с addTypeVariable может помочь здесь -

import com.squareup.javapoet.*; 
import javax.lang.model.element.Modifier; 
import java.io.IOException; 

public class AttemptGeneric { 

    public static void main(String[] args) throws IOException { 

    ClassName myClass = ClassName.get("com", "MyClass"); 
    ClassName myOtherClass = ClassName.get("com", "MyOtherClass"); 
    ClassName myInterface = ClassName.get("com", "MyInterface"); 
    TypeVariableName typeVariableName = TypeVariableName.get("T", myClass); 

    MethodSpec methodSpec = MethodSpec.methodBuilder("someMethod") 
      .returns(myOtherClass) 
      .addModifiers(Modifier.PUBLIC, Modifier.STATIC) 
      .addTypeVariable(typeVariableName.withBounds(myInterface)) 
      .addParameter(typeVariableName,"type") 
      .build(); 


    TypeSpec genericClass = TypeSpec.classBuilder("GenericImpl") 
      .addModifiers(Modifier.PUBLIC, Modifier.FINAL) 
      .addMethod(methodSpec) 
      .build(); 

    JavaFile javaFile = JavaFile.builder("com", genericClass) 
      .build(); 

    javaFile.writeTo(System.out); 

    } 
} 

Примечание - Я мой MyClass, MyOtherClass и MyInterface все в пакете с именем com который где класс реализация этого main() также находится.

Импорт используется -


Формирует вывод как -

package com; 

public final class GenericImpl { 
    public static <T extends MyClass & MyInterface> MyOtherClass someMethod(T type) { 
    } 
} 
+1

Немного поздно, но спасибо, вот ссылка выпустить https://github.com/square/javapoet/issues/543 – Pedram

+0

@Pedram - wc. вы были слишком быстры, чтобы опубликовать его как вопрос, который я считаю. :) – nullpointer

+0

yup, у меня есть крайние сроки для встречи;) – Pedram

Смежные вопросы