У меня есть два класса в разных пакетах, один из которых является подтипом другого.У меня проблемы с использованием лучшего модификатора доступа для конкретного метода.Общая структура моей проблемы показана ниже.
package p1;
public class Type1 {
protected void m() {
}
}
package p2;
public class Type2 extends Type1 {
private List<Type1> component;
protected void m() {
for(Type1 type1Instance : component)
type1Instance.m(); //m() in Type1 is not visable
}
}
Проблема в том, что метод m()
не отображается в этой настройке, поскольку код неучаствует в реализации Type1
.Это объясняется в документации Java здесь с примером здесь (см. Метод delta
в примере).
Я вижу два решения: оба из которыхМне не нравится.Я мог бы сделать m()
в Type1
публичным, но я не хочу, чтобы этот метод был частью API.Я также мог бы переместить оба этих класса в один и тот же пакет и использовать модификатор доступа по умолчанию, но это потребовало бы перемещения многих классов в моем реальном проекте в один и тот же пакет, что означает, что я потерял некоторую организацию.
Есть лилучший способ справиться с этим?