Java中的JAR级(汇编级)类作用域

时间:2011-09-27 15:50:28

标签: java jar

在C#中,如果我想让一个类对该程序集(DLL)中的任何类可见,我只需将其作为internal(这是默认值)。

如何在Java中执行此操作?在Java中,我注意到默认/内部作用域是包级别,而不是 JAR级别。这对我来说是一个问题,因为我有一个库,它有几个不同职责的子包(视图,控制器等),不能把它们放在同一个包中。

作为一个例子,我有两个类,如com.stackoverflow.main.first.Onecom.stackoverflow.main.second.Two,两者都应该能够相互实例化。

修改:我不希望该类为public,并且引用它的任何人都可以看到该类。它只是一个内部类 。我正在为消费创建一个API,对我来说最重要的是我的JAR的消费者可以看到哪些类。

3 个答案:

答案 0 :(得分:3)

Java没有库级范围的概念。将课程公开或使用工厂。

答案 1 :(得分:1)

要实现您想要的功能,您必须使用工厂模式的某种组合来创建要公开的类,并将私有类包保密。通常,我已经这样做了:

  1. com.foo.bar a la public interface Foo {}
  2. 等包中创建API的公共界面
  3. 创建一个公开创建方法的工厂类1a: public class FooFactory{ public Foo buildFoo(){ return new FooImpl(); }
  4. 将FooImpl创建为包私有类 - class FooImpl implements Foo{}
  5. 文档包以指示正确使用。
  6. 这并不完美,但是直到JSR关于模块范围的进展,它可能是你在java中最接近的。如果您想确保FooImpl没有得到不适当的扩展,请确保它标记为final。

答案 2 :(得分:0)

听起来就像使用公共访问修饰符一样简单。