我知道它不可能使用泛型與枚舉,但即時通訊尋找一種方法來實現枚舉與不同返回類型。Java:有沒有辦法在枚舉中獲得不同返回類型的方法?
例如,我有以下枚舉:
enum TestEnum {
TEST_INTEGER() {
@Override
public Integer getValue() {
return 123;
}
},
TEST_STRING() {
@Override
public String getValue() {
return "Test";
}
};
public abstract Object getValue();
}
在這種情況下TEST_INTEGER
和TEST_STRING
是TestEnum
實現。 這就是爲什麼當調用getValue()
時,方法getValue()
具有返回類型Object
而不是Integer
或String
。這意味着在每種情況下,我都必須投入相關的Classtype。
有沒有更好的方法來直接獲得不同的Classtypes?
這種方法的致命缺陷在於,它要求客戶知道對於每個不同常數所期望的不同返回類型,違反德米特法則等。如果枚舉常量傳遞給變量中的邏輯,客戶端將不知道返回類型是什麼,是嗎?這是一個有缺陷的解決方案,也許是因爲OP有一個有缺陷的問題。他們需要更好的類型分析。 Java不支持非協變返回類型。 –
@LewBloch我知道這不是最佳的,尤其是當多人使用代碼時。 (我絕不會在其他人使用的API中使用這樣的東西)如果你有一個更小的項目,你想要快速和骯髒的存儲不同的類型(例如主機/端口等),這是「好的」。它會是最好在靜態類內部有靜態類型(工作和自動完成一樣),但是枚舉可以通過編程方式迭代,對於需要使用反射的靜態類型。 – dognose