簡體   English   中英

將類嵌套在接口中是一個好主意嗎?

[英]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> {
       ....
   }
}

這是可以接受的,因為您沒有將實現細節混合到您的界面中。 你只是指定另一份合同。

是。 直接從語言規范

內部類是未顯式或隱式聲明為static的嵌套類。

並且 (粗體我的):

嵌套類是任何類,其聲明發生在另一個類或接口的主體內。

我覺得非常有用的一個用例是,如果你有一個構建器來創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM