3

JSON シリアル化コードを生成する注釈プロセッサを作成しています。POJOシリアライザーが必要な sを識別するために使用する注釈を次に示します。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface JsonSerialize {

}

そして、これが私のシリアライザーの基本インターフェースです

public interface JsonSerializer<T> {

    String serialize(T t);

}

その注釈を探してシリアライザ コードを生成する注釈プロセッサ コードを次に示します。

@Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        for (Element element : roundEnv.getElementsAnnotatedWith(JsonSerialize.class)) {
            if (element.getKind() == ElementKind.CLASS) {

                MethodSpec serializeMethod = MethodSpec
                        .methodBuilder("serialize")
                        .addModifiers(Modifier.PUBLIC)
                        .addParameter(ParameterSpec.builder(TypeName.get(element.asType()), "obj", Modifier.FINAL).build())
                        .returns(String.class)
                        .addStatement("return \"dummy string\"")
                        .build();

                TypeSpec serializer = TypeSpec
                        .classBuilder(element.getSimpleName().toString() + "JsonSerializer")
                        .addSuperinterface(JsonSerializer.class) // THIS LINE IS WRONG
                        .addModifiers(Modifier.PUBLIC)
                        .addMethod(serializeMethod)
                        .build();

                try {
                    JavaFile.builder(processingEnv.getElementUtils().getPackageOf(element).toString(), serializer)
                            .build()
                            .writeTo(processingEnv.getFiler());
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
        return true;
    }

しかし、生成されたクラスが継承でジェネリック パラメータを指定していないため、コンパイル エラーが発生します。どうすればそれを指定できますか?

4

1 に答える 1