我有以下课程:
public class Base{
private static class Derived extends Base{ }
private static class SuperDerived extends Base{ }
public static Base createDerived(){ return new Derived(); }
public static Base createSuperDerived(){ return new SuperDerived(); }
}
Run Code Online (Sandbox Code Playgroud)
我不希望这些派生类直接在Base类主体之外使用.
这是一个很好的方法吗?我不确定那个东西,因为派生的那些可能包含100行代码,可能会使Base类难以理解.
Aar*_*lla 10
也许,但往往不是.
我主要担心的是你的设计是由恐惧驱动的("有人可能会滥用").这可能导致各种问题.有一个类似于太多封装的东西,特别是当你有复杂的代码时,必须在消费者方面使用"我可以使用那个带有小变化"的错误.
通常,将类标记为内部而不是非常保护它就足够了.什么是保护无人关心的东西有什么意义?
我也建议不要使用static工厂方法.当你必须编写单元测试时,它会引起各种各样的痛苦.
您的另一个问题是班级规模.如果您仍然感受到保护代码的压力,请将类包私有化:
/*package*/ class Derived extends Base { ... }
Run Code Online (Sandbox Code Playgroud)
评论没有效果,但记录了意图(所以没有人认为"哦,有一个public缺失").
这样,只有同一个包中的类才能访问它们.