У меня есть родительский класс, содержащий структурированный статический вложенный класс.Вложенный класс должен быть общедоступным, так как он должен быть возвращен другим классам, где выполняется его содержимое.Однако только родительский класс и его подклассы должны иметь возможность создавать экземпляры вложенного класса, поскольку они знают, как определять его содержимое.Все классы, показанные ниже, находятся в разных пакетах.
public abstract class Parent
{
public static class Data
{
public final String data1
...
public Data(String d1, ...)
{
data1 = d1;
...
}
}
public abstract Data getData();
}
public final class Subclass extends Parent
{
@Override
public Data getData()
{
return new Data(.....);
}
}
public class SomeOtherClass
{
public void someMethod()
{
final Data d = new Subclass().getData();
System.out.println(d.data1);
}
}
Объявление Data
класса protected
остановит getData()
от правильной работы.Уменьшение модификатора доступа для конструктора Data
помешает правильной работе подклассов Parent
.Мне нужно что-то вроде protected-by-parent
, которое, как я предполагаю, не существует в Java.
Есть ли подходящий обходной путь?Одна возможность, которую я вижу, - это создание protected
метода в Parent
, который эффективно отражает, вызывает и возвращает из конструктора Data
(который будет сделан private
).Это, однако, кажется немного грязным;Кто-нибудь знает лучший способ / дизайн?