这样行不通,因为以下代码
OwnCollection<Game> gc = new Query().<Game>getParsedCollection( ... );
实际上并没有通过Game
内部getParsedCollection()
。<Game>
这里只告诉getParsedCollection()
应该返回的编译器OwnCollection<Game>
,但是T
内部getParsedCollection()
(和parseToGenericCollection()
)仍然被擦除,因此TypeToken
无法帮助您获取其值。
您需要改为Game.class
作为参数传递
public <T> OwnCollection<T> getParsedCollection(Class<T> elementType) { ... }
...
OwnCollection<Game> gc = new Query().getParsedCollection(Game.class);
然后用TypeToken
链接OwnCollection
的T
有elementType
如下:
Type type = new TypeToken<OwnCollection<T>>() {}
.where(new TypeParameter<T>() {}, elementType)
.getType();
请注意,此代码用于TypeToken
Guava,因为TypeToken
来自Gson的代码不支持此功能。