为什么在Java中使用静态嵌套接口?
我刚刚在我们的代码库中找到了一个静态嵌套接口。
class Foo { public static interface Bar {
/* snip */
}
/* snip */
}
我以前从未见过。原始开发人员遥不可及。因此,我不得不问:
静态接口背后的语义是什么?如果我删除,会发生什么变化static?为什么有人会这样做?
回答:
上例中的static关键字是多余的(嵌套接口自动为“ static”),可以删除而不会影响语义;我建议将其删除。接口方法上的“公共”和接口字段上的“公共最终”也是如此-修饰符是多余的,只会给源代码增加混乱。
无论哪种方式,开发人员都只是声明一个名为Foo.Bar的接口。与封闭类没有进一步的关联,除了无法访问Foo的代码也将无法访问Foo.Bar。(从源代码开始,即使Foo是程序包私有的,字节码或反射也可以访问Foo.Bar!)
如果希望仅在外部类中使用嵌套接口,则可以通过这种方式创建嵌套接口,这样您就不必创建新的顶级名称。例如:
public class Foo { public interface Bar {
void callback();
}
public static void registerCallback(Bar bar) {...}
}
// ...elsewhere...
Foo.registerCallback(new Foo.Bar() {
public void callback() {...}
});
以上是 为什么在Java中使用静态嵌套接口? 的全部内容, 来源链接: utcz.com/qa/408037.html