接口内的内部类

是否可以在接口内创建内部类?如果可能的话,由于我们不打算创建任何接口对象,为什么我们要创建一个内部类呢?

这些内部类在任何开发过程中都有帮助吗?


慕无忌1623718
浏览 413回答 3
3回答

梦里花落0921

是的,您可以在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代码库在这里发生的时间恰好是零时间(但是,我们还有很多其他事情,我们认为不良行为也恰好发生在零时间,所以其他人也会发现这完全是正常的……)。

呼唤远方

是的,我们可以在接口内部有类。用法的一个例子可能是public interface Input{&nbsp; &nbsp; public static class KeyEvent {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public static final int KEY_DOWN = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public static final int KEY_UP = 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int type;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int keyCode;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public char keyChar;&nbsp; &nbsp; }&nbsp; &nbsp; public static class TouchEvent {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public static final int TOUCH_DOWN = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public static final int TOUCH_UP = 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public static final int TOUCH_DRAGGED = 2;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int type;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int x, y;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public int pointer;&nbsp; &nbsp; }&nbsp; &nbsp; public boolean isKeyPressed(int keyCode);&nbsp; &nbsp; public boolean isTouchDown(int pointer);&nbsp; &nbsp; public int getTouchX(int pointer);&nbsp; &nbsp; public int getTouchY(int pointer);&nbsp; &nbsp; public float getAccelX();&nbsp; &nbsp; public float getAccelY();&nbsp; &nbsp; public float getAccelZ();&nbsp; &nbsp; public List<KeyEvent> getKeyEvents();&nbsp; &nbsp; public List<TouchEvent> getTouchEvents();}这里的代码有两个嵌套的类,用于封装有关事件对象的信息,这些信息随后在诸如getKeyEvents()的方法定义中使用。将它们包含在Input接口中可以提高凝聚力。

梵蒂冈之花

有效的使用,恕我直言,正在定义由封闭的接口方法接收或返回的对象。通常是数据保存结构。这样,如果该对象仅用于该接口,那么您将拥有更加紧密的联系。例如:interface UserChecker {&nbsp; &nbsp;Ticket validateUser(Credentials credentials);&nbsp; &nbsp;class Credentials {&nbsp; &nbsp; &nbsp; // user and password&nbsp; &nbsp;}&nbsp; &nbsp;class Ticket {&nbsp; &nbsp; &nbsp; // some obscure implementation&nbsp; &nbsp;}}但是无论如何……这只是口味的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java