Мне интересно, есть ли возможность вернуть универсальный тип из выражения переключателя Java 12.
Базовый код может выглядеть так:
boolean result = switch(ternaryBool) {
case TRUE -> true;
case FALSE -> false;
default -> throw new IllegalArgumentException("Seriously?!");
};
Есть ли что-то против того, чтобы делать это таким образом?
T result = switch(ternaryBool) {
case TRUE -> BooleanUtils.toBoolean('true');
case FALSE -> new Integer(0);
default -> throw new IllegalArgumentException("Seriously?!");
};
EDIT:
Может быть, лучший пример из моего случая: мне нужно несколько классов, представляющих примитивные и сложные структуры данных. У меня также есть фабричный метод, который создает DataPointValue
на основе перечисления из другой системы и неизвестного значения (, давайте забудем об исключениях приведения ):
public static <T> IDataPointValue create(T value, DATA_TYPE dataType) throws Exception {
try {
switch (dataType) {
case BOOL:
return new BoolDataPointValue((Boolean) value);
case INT:
return new IntDataPointValue((Integer) value);
case WORD:
return new IntDataPointValue((Integer) value);
case STRING:
return new StringDataPointValue((String) value);
case REAL:
case FLOAT:
return new RealDataPointValue((Float) value);
case DINT:
return new DIntDataPointValue((Integer) value);
case DWORD:
return new DWordDataPointValue((Integer) value);
default:
throw new Exception("Data Type not implemented: " + dataType);
}
} catch (ClassCastException e){
throw new Exception("Could not create DPV in terms of Type incompability");
}
}
Есть ли какая-то прибыль, чтобы переместить этот код и использовать выражение переключения из Java 12?