我在不同的程序包中有两个类,一个是另一个的子类型。我在为特定方法使用最佳访问修饰符时遇到麻烦。我的问题的一般结构如下所示。
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文档here中用示例here对此进行了说明(请参见示例中的方法delta
)。
我看到了两种解决方案:我都不喜欢这两种解决方案。我可以将m()
中的Type1
设为公开,但我不希望此方法成为API的一部分。我也可以将这两个类都移到同一个包中并使用默认的访问修饰符,但这将涉及到将实际项目中的许多类移到同一个包中,这意味着我失去了一些组织。
有没有更好的方法来解决这个问题?