Я создаю приложение для Android, которое использует файл aar, который имеет класс, который использует шаблон построителя. Тем не менее, я подозреваю, что это простая старая проблема Java.Не удается вызвать вызов метода для шаблона построителя с скомпилированным внутренним классом
Все работает отлично, если я не использовать какие-либо из сцепленных сеттеров:
ProjectConfig config = new ProjectConfig$Builder("reqparam0")
.build() // this works fine
Однако, когда я пытаюсь использовать любой из сцепленных сеттеров,
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);
}
}
}
Может кто-нибудь пролить некоторый свет на то, что может быть причиной проблемы?
Я предлагаю вам разместить соответствующий код и полную ошибку. –
Шаблон Builder реализуется обычным способом, при этом цепные методы возвращают «это». Кроме того, моя IDE говорит, что метод chained возвращает 'ExampleClass.Builder', а не 'ExampleClass $ Builder' – Cognitio
Обычно '$' относится к внутреннему классу, а не к публичному классу. Но, не видя соответствующего кода, я откажусь от этого вопроса –