【发布时间】:2018-10-30 20:53:36
【问题描述】:
我有一个包含类似结构的静态嵌套类的父类。嵌套类必须是公共的,因为它应该返回到对其内容进行操作的其他类。但是,只有父类及其子类应该能够实例化嵌套类,因为它们知道如何定义其内容。下面显示的所有类都在不同的包中。
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 中不存在。
是否有合适的解决方法?我可以看到的一种可能性是在Parent 中创建一个protected 方法,该方法有效地从Data 的构造函数(将被设为private)进行镜像、调用和返回。然而,这似乎有点混乱。有人知道更好的方法/设计吗?
【问题讨论】:
标签: java inner-classes access-modifiers