I just came accross the following code, which surprised me a little bit, I converted it to a simple SSCEE here though:
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();
}
Now from outside this package, I can do the following:
Consumer<MyEnum> myMethod = MyEnum::myMethod;
However I am not able to use MyInterface
at all, which I understand as it is package-private to custompackage.package1
.
I don't understand what exactly is going on though, it seems like MyEnum
got the myMethod()
method added, but it does not implement (from the outside) MyInterface
.
How does this work?
MyEnum
to implementmyMethod()
, but then from the outside, any user ofMyEnum
simply sees that it happens to have a method namedmyEnum()
, however the user knows nothing about the interface method thatmyEnum()
is implementing. – Mauriciomaurie