在C#中,如果我想让一个类对该程序集(DLL)中的任何类可见,我只需将其作为internal
(这是默认值)。
如何在Java中执行此操作?在Java中,我注意到默认/内部作用域是包级别,而不是 JAR级别。这对我来说是一个问题,因为我有一个库,它有几个不同职责的子包(视图,控制器等),不能把它们放在同一个包中。
作为一个例子,我有两个类,如com.stackoverflow.main.first.One
和com.stackoverflow.main.second.Two
,两者都应该能够相互实例化。
修改:我不希望该类为public
,并且引用它的任何人都可以看到该类。它只是一个内部类 。我正在为消费创建一个API,对我来说最重要的是我的JAR的消费者可以看到哪些类。
答案 0 :(得分:3)
Java没有库级范围的概念。将课程公开或使用工厂。
答案 1 :(得分:1)
要实现您想要的功能,您必须使用工厂模式的某种组合来创建要公开的类,并将私有类包保密。通常,我已经这样做了:
com.foo.bar
a la public interface Foo {}
public class FooFactory{
public Foo buildFoo(){ return new FooImpl(); }
class FooImpl implements Foo{}
这并不完美,但是直到JSR关于模块范围的进展,它可能是你在java中最接近的。如果您想确保FooImpl没有得到不适当的扩展,请确保它标记为final。
答案 2 :(得分:0)
听起来就像使用公共访问修饰符一样简单。