是的,您可以在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{ 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接口中可以提高凝聚力。