2017-01-29 8 views
1

次のシグネチャでメソッドを生成するにはどうすればよいですか?JavaPoet汎用パラメータ

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

答えて

2

addTypeVariableとともにTypeVariableNameを使用すると、ここに役立つかもしれない -

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); 

    } 
} 

を - 私はすべてのクラスであるcomという名前のパッケージ内に私のMyClassMyOtherClassMyInterfaceをしましたこの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

ええ、私は満たすために締め切りがある;) – Pedram

関連する問題