有一个名为
的类public Class Foo{
public something(){
...}
Foo(){
...}
}
现在因为类是公共的,所以任何人都可以访问它,但它的构造函数只能用于本地包,但有没有办法将构造函数提供给任何其他包
问题是它已经是我正在研究的相当大的代码,并且不希望公众可以使用构造函数,但不幸的是有人已经使用过它在包之外(构造函数以前是公共的)< / p>
答案 0 :(得分:4)
我认为你所寻找的东西与C ++中的friend运算符相当。 Java没有这个(有充分的理由)。
根据这有多糟糕,您可以将公共构造函数标记为已弃用,并切换为使用工厂方法进行仅限程序包的使用。然后将构造函数更改为在另外几个版本中打包私有
长短:一旦你向公众发布了API,你就要么支持它,要么打破他们的构建。
答案 1 :(得分:1)
Java中的可见性是基于包的,它是一个全有或全无的决定,例如你没有像在C ++中声明一个“朋友类”那样的东西。所以我担心没有办法做你想做的事,除了等待项目Jigsaw(看起来像是在Java8中)。
你可以做的一件事是保持构造函数是公共的,但是要将它注释为@Deprecated,并注释它不应该在包之外使用。
除了只有硬解决方案才能删除公众,让它破解,所以其他人需要修复他们的代码。你不会通过这个动作结交新朋友,但是一旦它出来就很难将精灵带回瓶中。现在比以后更好 - 想想像Integer(int)这样的原始包装器的公共构造函数,其中Sun非常错误,并且无法在以后将其取回。
答案 2 :(得分:0)
没有这样的功能。我会尝试找到使用构造函数的现有位置并修复它们。 (如果没有太多)