Java:有没有办法在枚举中获取具有不同返回类型的方法?

时间:2017-02-23 15:11:44

标签: java methods enums

我知道不可能在Enums中使用泛型,但是我正在寻找一种方法来实现具有不同返回类型的枚举的方法

例如我有以下枚举:

enum TestEnum {

    TEST_INTEGER() {
        @Override
        public Integer getValue() {
            return 123;
        }
    },

    TEST_STRING() {
        @Override
        public String getValue() {
            return "Test";
        }
    };

    public abstract Object getValue();
}

在这种情况下,TEST_INTEGERTEST_STRINGTestEnum的实现。 这就是为什么方法getValue()在调用Object时具有返回类型Integer而不是StringgetValue()。这意味着在每种情况下我都要投射到有关的Classtype。

有没有更好的方法来获得不同的Classtypes?

2 个答案:

答案 0 :(得分:2)

是的,java允许“减少”返回类型(参见here)。

但在你的背景下,这在概念上没有意义!

想想

TestEnum someEnum = ...
Integer val = someEnum.getValue();

编译器应该如何知道哪个您实际分配给该值的枚举常量?

因此编译器只能理解:

 Integer val = TestEnum.TEST_INTEGER.getValue();

但是,如果您只是知道它正在处理的是一些 TestEnum实例呢?

答案 1 :(得分:0)

如果使用<T> T而不是Object,Java将执行未经检查的转换,具体取决于@Override实现的返回类型:

public abstract <T> T getValue();

...

String s = TestEnum.TEST_STRING.getValue();
Integer i = TestEnum.TEST_INTEGER.getValue();

使用错误的“赋值”将在运行时导致ClassCastException。因此,如果实际类型不明显,有时可能会变得难以调试。