Returned Java covariant return types do not work to override enum instance methods?

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). -, , . , .

, , , , , - .

, , , , . , .

+5
1

CovariantEnum.INT_INSTANCE - CovariantEnum, Object getData.

, enum.

+2

All Articles