我刚刚在我们的代码库中发现了一个静电嵌套接口.
class Foo {
public static interface Bar {
/* snip */
}
/* snip */
}
我以前从未见过这种情况.原来的开发商遥不可及.因此,我不得不这样问:
静态接口背后的语义是什么?如果我go 掉static
,会有什么变化?为什么会有人这么做?
我刚刚在我们的代码库中发现了一个静电嵌套接口.
class Foo {
public static interface Bar {
/* snip */
}
/* snip */
}
我以前从未见过这种情况.原来的开发商遥不可及.因此,我不得不这样问:
静态接口背后的语义是什么?如果我go 掉static
,会有什么变化?为什么会有人这么做?
上面示例中的static关键字是冗余的(嵌套接口自动为"static"),可以在不影响语义的情况下删除;我建议将其移除.接口方法上的"public"和接口字段上的"public final"也是如此——修饰符是多余的,只会给源代码增添混乱.
无论哪种方式,开发人员只需声明一个名为Foo的接口.wine 吧除了无法访问Foo的代码将无法访问Foo之外,与封闭类没有进一步的关联.也可以.(来自源代码——字节码或反射可以访问Foo.Bar,即使Foo是包私有的!)
如果希望只从外部类使用嵌套接口,这样就可以创建嵌套接口,这样就不会创建新的顶级名称.例如:
public class Foo {
public interface Bar {
void callback();
}
public static void registerCallback(Bar bar) {...}
}
// ...elsewhere...
Foo.registerCallback(new Foo.Bar() {
public void callback() {...}
});