我正在创建一个使用aar文件的android应用程序,该文件具有使用构建器模式的类。但是,我怀疑这是一个普通的旧Java问题。
如果我不使用任何链式setter方法,一切正常:
ProjectConfig config = new ProjectConfig$Builder("reqparam0")
.build() // this works fine
但是,一旦我尝试使用任何链式setter方法,
ProjectConfig config = new ProjectConfig$Builder("reqParam0")
.contactEmail("optParam0")
.build() // ERROR - can't find build() method
我知道Builder实现本身没有问题,因为我构建它并且在没有先编译并将其作为aar文件打包到另一个应用程序中时使用它就可以正常工作。
请注意,我需要使用'$'访问器而不是正常'。'因为它是一个已编译的类。我怀疑这也与这个问题有关。
这是班级:
public class ProjectConfig {
private final String apiKey;
private final boolean batterySavingMode;
private final String contactEmail;
public ProjectConfig(Builder builder) {
apiKey = builder.apiKey;
batterySavingMode = builder.batterySavingMode;
contactEmail = builder.contactEmail;
}
public String getApiKey() {
return apiKey;
}
public boolean isBatterySavingMode() {
return batterySavingMode;
}
public String getContactEmail() {
return contactEmail;
}
public static class Builder{
// Required parameters
private String apiKey;
// Optional parameters
private boolean batterySavingMode = false;
private String contactEmail = null;
public Builder(String apiKey){
this.apiKey = apiKey;
}
public Builder batterySavingMode(boolean enabled){
this.batterySavingMode = enabled;
return this;
}
public Builder contactEmail(String contactEmail) {
this.contactEmail = contactEmail;
return this;
}
public ProjectConfig build(){
return new ProjectConfig(this);
}
}
}
任何人都可以解释可能导致问题的原因吗?
答案 0 :(得分:1)
这实际上是一个编译时错误。 IDE无法找到的方法变为红色,并说“无法解决方法”。
然而,它似乎是IDE的一个错误...至少在运行时找到了这个方法,因为我测试了它,当应用程序运行时一切顺利。
我甚至检查了调试器,并使用正确的值创建了ProjectConfig对象,即使对于它无法解析的方法也是如此。
所以看起来像JetBrains的错误报告会更好......