2017-01-29 6 views

답변

2

-

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

    } 
} 

- I했습니다 내 모든 곳 클래스가 com라는 이름의 패키지 내 MyClass, MyOtherClassMyInterface 이 구현은 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