我刚刚看到了以下代码,有些惊讶,但我将其转换成了一个简单的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
的用户只会发现它恰好有一个名为myEnum()
的方法,然而用户对myEnum()
实现的接口方法一无所知。 - forgivenson