Mr *_*ean 9 java class package
我正在创建一个Java库,作为最终产品,打算将这个.jar分发给开发人员.
我正在从Objective-C"翻译"我的库,在那里我控制哪些类头文件可供开发人员使用.换句话说,我只向开发人员展示他们可以处理的几个类.
在我的Java库中,我正在使用包,而且我的包已经变得非常大.所以我决定将我的模型和控制器分成不同的包.但是现在我希望保密的模型我需要标记为公共,以便从主包中使用.
我的问题是,这与我在Objective-C中做的事情有什么不同吗?
例如,我有一个Event类,它实际上只在内部使用,我不希望用户知道它或考虑它.我有另一个类TimedEvent,用户可以获得一个管理实例.
在我的Objective-C中,我只是从库公共范围中排除了Event类,允许使用TimedEvent.
如果我在我的库中使事情变得更整洁,那么包装似乎不是那样的.从现在开始,我的主控制器位于主包中,所有模型都在另一个包中 - 被迫拥有一个公共范围.
意见?
这是可能的Java,但有理由(几乎)没有人这样做...
如果你把实现和接口在同一个包,那么你可以省略所有访问修饰符(private
,protected
,public
从类和方法),以给他们"默认"或"包"可视性:只有在同一个包中的类被允许看/使用它们.
缺点:您必须混合使用API和实现.
另一种方法是将实现移动到一个包中*.private.*
.不再混合API和实现,但恶意用户可以轻松访问实现 - 它只是一个命名约定.就像一个停止标志:它意味着什么("小心"),但实际上并没有阻止你.
最后,您可以在界面内部实现接口.例如:
public interface IFoo {
String getName();
private static class Foo implements IFoo {
public String getName();
}
public static class FooFactory {
public static IFoo create() { return new Foo(); }
}
}
Run Code Online (Sandbox Code Playgroud)
丑,不是吗?