私人接口是否曾用于设计决策?如果是这样,原因是什么,何时知道需要私有接口?
答案 0 :(得分:5)
顶级界面不能是私密的。它只能有public
或包访问权限。来自Java Language Specification, section 9.1.1: "Interface Modifiers":
访问修饰符protected和private仅适用于其声明直接由类声明包含的成员接口(第8.5.1节)。
嵌套接口可以是private
,只要它及其子类(如果有)是其顶级类的 实现细节 < / strong>即可。
例如,下面的嵌套接口CLibrary
用作顶级类的实现细节。它纯粹用于为JNA定义API,由接口Class
传达。
public class ProcessController {
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary( "c", CLibrary.class );
int getpid();
}
public static int getPid() {
return CLibrary.INSTANCE.getpid();
}
}
作为另一个示例,此私有接口定义了实现自定义格式符号的私有嵌套类使用的API。
public class FooFormatter {
private interface IFormatPart {
/** Formats a part of Foo, or text.
* @param foo Non-null foo object, which may be used as input.
*/
void write( Foo foo ) throws IOException;
}
private class FormatSymbol implements IFormatPart { ... }
private class FormatText implements IFormatPart { ... }
...
}
答案 1 :(得分:3)
恕我直言您无法将界面设为私有。
但是我经常有两个界面,一个用于公共用途,一个用于内部用途。内部使用接口I尽可能使包本地化。例如
public interface MyInterface {
public void publicMethod();
}
interface DirectMyInterface extends MyInterface {
public void internalUseOnlyMethod();
}
内部使用方法暴露了我不希望其他开发人员使用的方法和/或我希望能够轻松更改。我有接口的原因是我有几个实现,我想通过接口在内部使用。
答案 2 :(得分:1)
如果接口用于内部使用,则必须受到包保护。 一般来说,如果界面没有任何兴趣,那么这是一个很好的api设计决策to hide it,因为界面用户的复杂性较低,并且允许你更容易地重构它,因为当界面是公共的时候在API中,你失去了改变它的自由。