java - 无法将构建器模式的方法调用与已编译的内部类链接起来

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

我正在创建一个 android 应用程序,它使用一个 aar 文件,该文件具有一个使用构建器模式的类。但是,我怀疑这是一个普通的旧 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);
    }
 }

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

最佳答案

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

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

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

因此,作为向 JetBrains 的错误报告,这似乎会更好......

关于java - 无法将构建器模式的方法调用与已编译的内部类链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757944/

相关文章:

java - Spring Boot Security 不会抛出 401 Unauthorized Exception 但 404 Not Found

android - Viewpager + 网络服务

python - 我该如何解决lto1 : internal compiler error: in lto_tag_to_tree_code, at lto-streamer.h:1005 that appears after 'make' command

java - 为什么我的应用程序无法启动(使用 hibernate 搜索配置)?

java - onClick 事件不工作 Android

android - OnUpgrade 何时被调用以及它如何获得 oldVersion 参数?

android - Native Express AdView 未显示

syntax - 为什么我不能用新行的每个分隔符和字段更新记录?

c++ - 带有 "endl"的模板函数的 VS2015 编译错误

java - 为什么这里是 "Duplicate local variable messages"?