首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaPoet作为匿名类生成字段

使用JavaPoet作为匿名类生成字段
EN

Stack Overflow用户
提问于 2018-05-24 20:17:25
回答 1查看 607关注 0票数 0

我正在编写一个注释处理器库,并使用JavaPoet生成som代码。我需要生成一个类,其中包含一个用匿名类声明的字段,如下所示:

代码语言:javascript
复制
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;
            }

        }
    };  
}

如何用valueFloatListener定义JavaPoet字段?Tnx提前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 14:46:14

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

像这样的事情应该有效:

代码语言:javascript
复制
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()); 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50517501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档