Dav*_*Far 4 java visibility interface multiple-inheritance package
我有一个包P有
public interface Ipublic class S1 extends Foo implements Ipublic class S2 extends Bar implements I.现在我想禁止I外部的实现P,但I应该是公开的,因为我用它来做public method(I parameter).
如何才能做到这一点?
这有什么"包装最终模式"吗?
你有这样的情况吗?
细节:
我所知道的使用只包私有构造函数,而不是接口的抽象类的可能性I,但S1并S2扩展不同的类,所以我需要多重继承(因为模拟多重继承(例如见有效的Java项目18)不在这里工作了).
您还可以尝试以下尝试:
使用虚拟包私有接口,并在公共接口中创建一个返回它的方法.像这样:
public interface I {
Dummy getDummy(); // this can only be used and implemented inside of the
// current package, because Dummy is package private
String methodToUseOutsideOfPackage();
}
interface Dummy {}
Run Code Online (Sandbox Code Playgroud)
多亏了这一点,只有当前包中的类才能实现接口I.来自外部的所有类将永远无法实现该方法Dummy getDummy().同时,包外部的类将能够使用接口I中没有Dummy签名接口的所有其他方法.
这个解决方案并不漂亮,因为你的界面中有一个无用的方法I,但你应该能够达到你想要的效果.