第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

接口內(nèi)的內(nèi)部類

接口內(nèi)的內(nèi)部類

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

3 回答

?
夢里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個贊

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


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


public interface A {

    class B {

    }

}

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


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)

        }

    }

}

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


現(xiàn)在,我不會評論這種構(gòu)造的有用性,并且從我已經(jīng)看到的內(nèi)容:我已經(jīng)看到了,但是它不是很常見的構(gòu)造。


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


查看完整回答
反對 回復(fù) 2019-11-25
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個贊

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


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();

}

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


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

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個贊

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


例如:


interface UserChecker {

   Ticket validateUser(Credentials credentials);


   class Credentials {

      // user and password

   }


   class Ticket {

      // some obscure implementation

   }

}

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


查看完整回答
反對 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 440 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號