2016-04-21 46 views
2

我正在创建一个使用具有使用构建器模式的类的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 

我知道,生成器实现本身没有问题,因为我构建它时,它在没有首先编译并打包到另一个应用程序中作为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

我建议你发布相关的代码和完整的错误。 –

+0

Builder模式以正常方式实现,链式方法返回'this'。 还有,我的IDE说链式方法返回“ExampleClass.Builder”而不是“ExampleClass中$生成器” – Cognitio

+0

通常'$'是指一个内部类,而不是一个公共类。但没有看到相关的代码,我会放弃在这个问题 –

回答

0

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

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

我甚至检查调试器,以及一个ProjectConfig对象与正确的价值创造,甚至为它说,它无法解析的方法。

因此,看起来这会更好的作为JetBrains的错误报告...