如果ElementType
是静态已知的类型,则很容易创建表示Type
集合的ElementType
对象:
Type listType = new TypeToken<ObservableList<ElementType>>(){}.getType();
但这在这里是不可能的,因为我的
elementType
是一个动态值,仅在运行时才知道:@Override
public ListProperty<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
JsonParseException {
Type elementType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];
Type listType = // ??? create the type representing a ObservableList<elementType>
ObservableList<?> list = context.deserialize(json, listType);
return new SimpleListProperty<>(list);
}
现在,我希望
listType
表示ObservableList<>
,其类型参数应为elementType
的值。有办法吗? 最佳答案
如果您有番石榴,则可以使用其TypeToken
版本提供所需的内容:
static <T> TypeToken<ObservableList<T>> mapToken(TypeToken<T> typeParameter) {
return new TypeToken<ObservableList<T>>() {}.where(new TypeParameter<T>() {}, typeParameter);
}
@Override
public ListProperty<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws
JsonParseException {
Type elementType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];
Type listType = mapToken(TypeToken.of(elementType)).getType();
ObservableList<?> list = context.deserialize(json, listType);
return new SimpleListProperty<>(list);
}