Java - Generics vs Casting-Objekte
ich habe ein klasseData<T>
mit einem generischen Attribut
private T value;
Gibt es eine schönere Möglichkeit, um Folgendes zu tun?
dh den generischen Typ in verschiedenen Formen zurückgeben?
public List<String> getValues() {
if (value.getClass() != ArrayList.class)
throw new Exception("Wrong Enum value '%s'", value);
return (ArrayList<String>) value;
//ugly
}
public String getStringValue() {
if (value.getClass() != String.class)
throw new Exception("Wrong value type '%s'", value);
return (String) value;
//ugly
}
public Float getFloatValue() {
if (value.getClass() != Double.class)
throw new Exception("Wrong value type '%s'", value);
return (Float) value;
//ugly
}
public Long getLongValue() {
if (value.getClass() != Double.class)
throw new Exception("Wrong value type '%s'", value);
return (Long) value;
//ugly
}
public T getValue() {
return value;
}
Präzision, ich benutze Gson als Deserialisierer, um eine Liste zu erhalten, jedes Datenobjekt kann dann heterogen sein
Es könnten auch Adapter für Float und Langzeiterkennung registriert werden, aber es wäre weder schneller noch besser
bearbeiten: gson kann longs nicht abrufen:
entweder:
((Long) d.getValue())
java.lang.Double kann nicht in java.lang.Long umgewandelt werden
oder
Long.parseLong( d.getValue().toString())
java.lang.NumberFormatException: Für Eingabezeichenfolge: "212231.0"
Ich habe versucht, einen LongAdpater zu registrieren
gsonBuilder.registerTypeAdapter(Long.class, new LongAdapter());
private static class LongAdapter implements
JsonSerializer<Long>, JsonDeserializer<Long>
{
@Override public Long deserialize(
JsonElement json,
Type type,
JsonDeserializationContext arg2) throws JsonParseException
{
return json.getAsLong();
}
@Override
public JsonElement serialize(Long l, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(new Double(l));
}
}
java.lang.IllegalArgumentException: Typadapter für die Klasse java.lang.Long können nicht registriert werden
edit2 für tsOverflow:
Data<Float> d1 = new Data<Float>( new Float(6.32));
List<String> l = new ArrayList<String>();
l.add("fr");
l.add("it");
l.add("en");
Data<List<String>> d2 = new Data<List<String>>( l);
Data<Long> d3 = new Data<Long>(new Long(212231));
List<Data> data = new ArrayList<Data>();
data.add(d1);
data.add(d2);
data.add(d3)
new Gson().toJson(data);