У меня есть плохо созданный контейнерный объект, который объединяет значения разных типов java (String, Boolean и т.д.)
public class BadlyCreatedClass {
public Object get(String property) {
...;
}
};
И мы извлекаем из него значения таким образом
String myStr = (String) badlyCreatedObj.get("abc");
Date myDate = (Date) badlyCreatedObj.get("def");
Я вынужден написать какой-то новый код с помощью этого объекта, и я пытаюсь понять, есть ли для этого чистый способ. Более конкретно, какой из методов предпочтительнее?
Явный ролик
String myStr = (String) badlyCreatedObj.get("abc")
Date myDate = (Date) badlyCreatedObj.get("def");
Использование родового литья
public <X> X genericGet(String property) {
}
public String getString(String property) {
return genericGet(property);
}
public Date getDate(String property) {
return genericGet(property);
}
Использование Class.cast
<T> T get(String property, Class<T> cls) {
;
}
Я рассмотрел несколько связанных вопросов о SO Java generic function: как вернуть общий тип, Java generic return type все они, кажется, говорят, что такое типирование опасно, хотя я не вижу большой разницы между тремя, учитывая этот метод, который вы бы предпочли?
Спасибо