【发布时间】:2014-07-11 18:22:31
【问题描述】:
我刚刚遇到以下代码,这让我有点吃惊,不过我在这里将其转换为一个简单的 SSCEE:
custompackage.package1.MyEnum.java
public enum MyEnum implements MyInterface {
CONSTANT_ONE() {
@Override
public void myMethod() {
//do something very interesting
}
},
CONSTANT_TWO() {
@Override
public void myMethod() {
//do something very interesting
}
};
}
interface MyInterface {
void myMethod();
}
现在从这个包之外,我可以做以下事情:
Consumer<MyEnum> myMethod = MyEnum::myMethod;
但是我根本无法使用MyInterface,我理解这是custompackage.package1 的包私有。
我不明白到底发生了什么,似乎MyEnum 添加了myMethod() 方法,但它没有实现(从外部)MyInterface。
这是如何工作的?
【问题讨论】:
-
只是一个猜测,但也许接口强制
MyEnum实现myMethod(),但是从外部来看,MyEnum的任何用户只是看到它恰好有一个名为@987654331 的方法@,但是用户对myEnum()正在实现的接口方法一无所知。
标签: java interface enums package-private