Вы не можете сделать это с помощью перечисления.
Но вы можете сделать это с помощью непубличного экземпляра класса.
class MyNotEnum<T> {
static final MyNotEnum EXAMP = new MyNotEnum<>("example", Boolean.class);
String keyInMap;
Class<T> type;
private MyEnum(String keyInMap, Class<T> type){
this.keyInMap = keyInMap;
this.type = type;
}
}
На самом деле, значения перечисления просто устано c окончательные поля внутри класса enum. Вы получаете несколько других вещей бесплатно (например, метод valueOf
, устойчивость к рефлексивному воплощению и др. c), но это большая часть того, что есть в перечислении. Делая это самостоятельно, вы получаете возможность добавлять различные значения generi c между значениями.
Тогда:
public <T> T someGetterMethod(MyNotEnum<T> en){
String key = en.keyInMap;
Class<T> clazz = en.type;
Object value = dataMap.get(key);
return clazz.cast(value);
}