Java - Generics vs Casting Objects

У меня есть классData<T>

с общим атрибутом

private T value;

Есть ли лучший способ сделать следующее?
т.е. возвращение универсального типа в разных формах?

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

Точность, я использую Gson в качестве десериализатора, чтобы получить список, каждый объект данных может быть разнородным
Может также регистрировать адаптеры для обнаружения с плавающей запятой и длительного обнаружения, но это не будет быстрее или лучше

edit: gson не может получить longs:

или:

 ((Long) d.getValue())

java.lang. Двойной нельзя привести к java.lang.Long

или же

Long.parseLong( d.getValue().toString())

java.lang.NumberFormatException: для входной строки: & quot; 212231.0 & quot;

Я пытался зарегистрировать LongAdpater

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: невозможно зарегистрировать адаптеры типов для класса java.lang.Long

edit2 для 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);

Ответы на вопрос(4)

Ваш ответ на вопрос