接口中的内部类
2022-08-31 09:32:00
是否可以在接口中创建内部类?
如果可能的话,为什么我们要创建一个这样的内部类,因为我们不打算创建任何接口对象?
这些内部类对任何开发过程都有帮助吗?
是否可以在接口中创建内部类?
如果可能的话,为什么我们要创建一个这样的内部类,因为我们不打算创建任何接口对象?
这些内部类对任何开发过程都有帮助吗?
是的,我们可以在接口内有类。一个用法示例可能是
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()。将它们放在输入接口中可以提高内聚力。
是的,您可以在Java接口中创建嵌套类或内部类(请注意,与普遍的看法相反,没有“静态内部类”这样的东西:这根本没有意义,当嵌套类是静态的时,没有“内部”和“outter”类,所以它不能是“静态内部的”)。
无论如何,以下内容编译得很好:
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代码库在这里,这种情况恰好发生时间为零(但是我们还有很多其他的事情,我们认为这些不良做法也恰好在零时间发生,其他人会发现完全正常,所以...)。