[英]Is it a good idea to have a class nested inside an interface?
是否有可能在java中的接口內部有一個內部類???
您可以。 但這是O'Reilly所說的:
Java支持接口中嵌套類的概念。 語法和動態就像在類中聲明的嵌套類一樣工作。 但是,聲明嵌套在接口內的類將是非常糟糕的編程。 接口是概念的抽象,而不是概念的實現。 因此,實現細節應該省略接口。 請記住,僅僅因為你可以用鋸切斷你的手並不意味着它是一個特別好的主意。
也就是說,我可以看到嵌套在接口中的靜態實用程序類的參數。 雖然為什么它需要嵌套到界面而不是一個獨立的類是完全主觀的。
我同意這通常很少見,但我喜歡在接口方法需要返回多條信息時在接口中使用內部類,因為它實際上是合同的一部分而不是實現。 例如:
public interface ComplexOperationService {
ComplexOperationResponse doComplexOperation( String param1, Object param2 );
public static class ComplexOperationResponse {
public int completionCode;
public String completionMessage;
public List<Object> data;
// Or use private members & getters if you like...
}
}
顯然,這也可以在一個單獨的類中完成,但對我來說,感覺就像我將接口定義的整個API保存在一個位置,而不是分散。
是的,這是可能的,但這不常見。
interface Test
{
class Inner
{ }
}
class TestImpl implements Test
{
public static void main(String[] arg)
{
Inner inner = new Inner();
}
}
不直接回答您的問題,但在相關說明中,您還可以將接口嵌套在另一個界面中。 這是可以接受的,特別是如果您想提供視圖 。 Java的集合類執行此操作,例如Map.Entry
視圖中的Map.java
:
public interface Map<K,V> {
...
public static interface Entry<K,V> {
....
}
}
這是可以接受的,因為您沒有將實現細節混合到您的界面中。 你只是指定另一份合同。
我覺得非常有用的一個用例是,如果你有一個構建器來創建一個Interface實例。 如果構建器是Interface的靜態成員,則可以創建如下的實例:
DigitalObject o = new DigitalObject.Builder(content).title(name).build();
這是合法的,但我只是使用嵌套接口(如前所述)或嵌套枚舉來實現它。 例如:
public interface MyInterface {
public enum Type { ONE, TWO, THREE }
public Type getType();
public enum Status { GOOD, BAD, UNKNOWN }
public Status getStatus();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.