亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

接口內的內部類

接口內的內部類

慕無忌1623718 2019-11-25 15:48:01
是否可以在接口內創建內部類?如果可能的話,由于我們不打算創建任何接口對象,為什么我們要創建一個內部類呢?這些內部類在任何開發過程中都有幫助嗎?
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

是的,您可以在Java接口內創建嵌套類或內部類(請注意,與流行的看法相反,沒有“ 靜態內部類 ”之類的東西:這根本沒有道理,沒有“內部”也沒有“嵌套類是靜態的,因此它不能是“靜態內部”)。


無論如何,以下代碼可以正常編譯:


public interface A {

    class B {

    }

}

我已經看到它曾經在接口定義中直接放置了某種“合同檢查器”(好吧,在嵌套在接口中的類中,它可以具有靜態方法,而與接口本身相反,而不能)。如果我沒記錯的話,看起來像這樣。


public interface A {

    static class B {

        public static boolean verifyState( A a ) {

            return (true if object implementing class A looks to be in a valid state)

        }

    }

}

請注意,我沒有評論這種事情的用處,我只是在回答您的問題:它可以完成,這是我見過的一種用法。


現在,我不會評論這種構造的有用性,并且從我已經看到的內容:我已經看到了,但是它不是很常見的構造。


200KLOC代碼庫在這里發生的時間恰好是零時間(但是,我們還有很多其他事情,我們認為不良行為也恰好發生在零時間,所以其他人也會發現這完全是正常的……)。


查看完整回答
反對 回復 2019-11-25
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

是的,我們可以在接口內部有類。用法的一個例子可能是


public interface Input

{

    public static class KeyEvent {

         public static final int KEY_DOWN = 0;

         public static final int KEY_UP = 1;

         public int type;

         public int keyCode;

         public char keyChar;

    }

    public static class TouchEvent {

         public static final int TOUCH_DOWN = 0;

         public static final int TOUCH_UP = 1;

         public static final int TOUCH_DRAGGED = 2;

         public int type;

         public int x, y;

         public int pointer;

    }

    public boolean isKeyPressed(int keyCode);

    public boolean isTouchDown(int pointer);

    public int getTouchX(int pointer);

    public int getTouchY(int pointer);

    public float getAccelX();

    public float getAccelY();

    public float getAccelZ();

    public List<KeyEvent> getKeyEvents();

    public List<TouchEvent> getTouchEvents();

}

這里的代碼有兩個嵌套的類,用于封裝有關事件對象的信息,這些信息隨后在諸如getKeyEvents()的方法定義中使用。將它們包含在Input接口中可以提高凝聚力。


查看完整回答
反對 回復 2019-11-25
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

有效的使用,恕我直言,正在定義由封閉的接口方法接收或返回的對象。通常是數據保存結構。這樣,如果該對象僅用于該接口,那么您將擁有更加緊密的聯系。


例如:


interface UserChecker {

   Ticket validateUser(Credentials credentials);


   class Credentials {

      // user and password

   }


   class Ticket {

      // some obscure implementation

   }

}

但是無論如何……這只是口味的問題。


查看完整回答
反對 回復 2019-11-25
  • 3 回答
  • 0 關注
  • 447 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號