gpt4 book ai didi

java - 使用 JavaPoet 生成一个字段作为匿名类

转载 作者:行者123 更新时间:2023-12-02 11:12:36 24 4
gpt4 key购买 nike

我正在开发一个注释处理器库,并使用 JavaPoet 生成一些 Java 代码。我需要生成一个带有用匿名类声明的字段的类,如下代码所示:

public class Dummy {
private final OnSharedPreferenceChangeListener valueFloatListener = new OnSharedPreferenceChangeListener() {

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch (key) {
case "value_float":
valueFloatSubject.onNext(sharedPreferences.getFloat(key, defaultBean.valueFloat));
break;
}

}
};
}

如何使用 JavaPoet 定义 valueFloatListener 字段?提前发送。

最佳答案

您必须使用TypeSpec.anonymousClassBuilder("")

这样的事情应该有效:

MethodSpec.Builder method = 
MethodSpec.methodBuilder("onSharedPreferenceChangeListener")
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC,
Modifier.FINAL)
.addParameter(ParameterSpec.builder(ClassName.get(SharedPreferences.class),
"sharedPreferences")
.build())
.addParameter(ParameterSpec.builder(ClassName.get(String.class),
"key")
.build())
.addCode(" add the switch-statement here ...");

TypeSpec.Builder typeSpec =
TypeSpec.classBuilder("Dummy")
.addModifiers(Modifier.PUBLIC)
.addStatement("private final $T valueFloatListener = new $T() $L",
ClassName.get(OnSharedPreferenceChangeListener.class),
ClassName.get(OnSharedPreferenceChangeListener.class),
TypeSpec.anonymousClassBuilder("")
.addSuperinterface(ClassName.get(OnSharedPreferenceChangeListener.class))
.addMethod(method.build())
.build());

不确定代码是否编译干净,但我认为它显示了如何解决问题。

关于java - 使用 JavaPoet 生成一个字段作为匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com