无法使用已编译的内部类

时间:2016-04-21 01:21:36

标签: java android compiler-errors inner-classes builder-pattern

我正在创建一个使用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);
    }
 }

}

任何人都可以解释可能导致问题的原因吗?

1 个答案:

答案 0 :(得分:1)

这实际上是一个编译时错误。 IDE无法找到的方法变为红色,并说“无法解决方法”。

然而,它似乎是IDE的一个错误...至少在运行时找到了这个方法,因为我测试了它,当应用程序运行时一切顺利。

我甚至检查了调试器,并使用正确的值创建了ProjectConfig对象,即使对于它无法解析的方法也是如此。

所以看起来像JetBrains的错误报告会更好......