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);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage