Ich habe ein schlecht erstellten Containerobjekt, das zusammen Wert verschiedenen Java-Typen hält (String, Boolean etc ..)Java-Generika und typecasting
public class BadlyCreatedClass {
public Object get(String property) {
...;
}
};
Und wir extrahieren Werte von dem auf diese Weise
String myStr = (String) badlyCreatedObj.get("abc");
Date myDate = (Date) badlyCreatedObj.get("def");
Ich bin gezwungen, einen neuen Code mit diesem Objekt zu schreiben und ich versuche zu sehen, ob es einen sauberen Weg gibt, dies zu tun. Genauer gesagt, welches der folgenden Verfahren wird bevorzugt?
Explicit Guss
String myStr = (String) badlyCreatedObj.get("abc")
Date myDate = (Date) badlyCreatedObj.get("def");
Die Verwendung generischer Guss
public <X> X genericGet(String property) {
}
public String getString(String property) {
return genericGet(property);
}
public Date getDate(String property) {
return genericGet(property);
}
Mit Class.cast
<T> T get(String property, Class<T> cls) {
;
}
Ich habe durch viele verwandte Fragen über SO gegangen Java generic function: how to return Generic type, Java generic return type alle von ihnen scheinen zu sagen, die solche Typumwandlung ist gefährlich, obwohl ich nicht viel Unterschied zwischen den drei sehe, angesichts dieser Methode, die Sie bevorzugen würden?
Dank