Are private interfaces ever used in design decisions ? If so, what are the reasons and when do you know the need for a private interface?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
A top-level interface cannot be private. It can only have
public
or package access. From the Java Language Specification, section 9.1.1: "Interface Modifiers":A nested interface can be
private
whenever it and its subclasses, if any, are an implementation detail of its top-level class.For example, the nested interface
CLibrary
below is used as an implementation detail of the top-level class. It's used purely to define an API for JNA, communicated by the interface'sClass
.As another example, this private interface defines an API used by private nested classes implementing custom formatting symbols.
It has to be package protected if the interface if for internal use. In general if the interface hasn't any interest outside it's ambit it's a good api design decision to hide it because there's less complexity for the users of the interface and also allows you to refactor it more easily, because when the interface is public and in the API you loss the liberty to change it.
IMHO You cannot usefully make an interface private.
However I often have two interfaces, one for public use and one for internal use. The internal use interface I make package local if possible e.g.
The internal use methods expose methods I don't want other developers to use and/or I want to be able to change easily. The reason I have the interface at all is that I have several implementations which I want to use internally via an interface.