I spent some time with Google to find some information on this topic, but the results regarding both Java enumerations and covariant return types were largely absent.
So: is it possible to use covariant return types using enum methods, where you define a method in the enum class and then override it in instances, for example:
package enumcovariance.test;
public enum CovariantEnum {
INT_INSTANCE(new Integer(3)) {
@Override
public Integer getData () {
return (Integer) super.getData();
}
},
STR_INSTANCE("Hello world") {
@Override
public String getData () {
return (String) super.getData();
}
};
private final Object data;
private CovariantEnum(Object data) {
this.data = data;
}
public Object getData () {
return data;
}
}
And then use covariance like this:
package enumcovariance.test;
import org.junit.Test;
public class CovariantEnumTest {
@Test
public void intEnumTest () {
Integer i = CovariantEnum.INT_INSTANCE.getData();
}
@Test
public void strEnumTest() {
String s = CovariantEnum.STR_INSTANCE.getData();
}
}
, , , Object Integer ( String). -, , .
, .
, , , , , - .
, , , , . , .