У меня есть следующий код, в котором я пытаюсь расширить класс, но конструктор имеет следующую ошибку:Невозможно подклассы с шаблоном Builder: Отгрузка (Builder) не является общедоступной в Отгрузке; не может быть доступны из вне пакета
«Пересылка (Builder) не является общедоступным в пересылке, не может быть доступна из внешний пакет. "
Ни один из других ответов на SO, похоже, не применит или не устранит проблему. Я благодарен за любую сторону ...
Мой подкласс:
public class ShipmentSubclass extends Shipment {
public double foo;
public ShipmentSubclass(Builder builder) {
super(builder);
this.foo = 0.0;
}
И Пересылка определяется в другом пакете (импортируемого в баночке):
public class Shipment{
public static class Builder {
private String id;
public Builder(String id) {
this.id = id;
}
public Shipment build() {
return new Shipment(this);
}
}
private final String id;
public Shipment(Builder builder) {
this.id = builder.id;
}
}
Я наклеил ваш код локально, и он отлично работает для меня. Также функция Shipment (Builder) явно доступна в классе Shipment, поэтому мне интересно, используете ли вы тот же код, что и вы вставили? – foolo
Настоящий код сложнее. Родительский класс Отгрузка из другого пакета, который я добавил как Jar. Я сделал то же самое в новом проекте, и ошибка возникает только при попытке расширить родительский элемент из другого пакета. Я отредактировал вопрос, чтобы отметить это. –
Хорошо, но тогда сообщение об ошибке, вероятно, правильно. В вашем «реальном» коде конструктор Shipment (Builder builder) является закрытым, а отправка - из другого пакета. Таким образом, вам нужно либо перейти на тот же пакет, либо сделать этот конструктор общедоступным, если сможете. – foolo