1
class Json<T>
{
  @SerializedName( "T's type here" ) 
  private final ArrayList<T> _bucket = new ArrayList<T>( 5 );
  ...
}

我想知道如何(如果可能)在运行时确定类的通用参数。从我所读到的,这对于泛型类型的子类是可能的,但我无法找到如何使用类型本身来做到这一点。这些链接中有一些很棒的信息,但我不确定这是我要找的。

http://blog.xebia.com/2009/02/07/accessing-generic-types-at-runtime-in-java www.artima.com/weblogs/viewpost.jsp?thread=208860

我最终想要完成的是让 Gson 将上面的“_bucket”变量序列化为“T”类型的类名。

如果有人能指出我正确的方向,我将不胜感激。

4

2 回答 2

6

在给定示例中,泛型类型在运行时不可用。泛型类型信息只有在编译时指定时才能通过反射获得——例如,如果您定义了一个子类SomeTypeJson extends Json<SomeType>

作为一个组合,您可以通过检查 的内容来猜测泛型类型,List通过反射找到最具体的常见超类。

于 2010-07-15T20:22:54.897 回答
0

通常,您会对该类型进行子类化以提供具体类型,然后处理包应该能够正确解析类型。或者,许多包都有某种类型引用的概念(“类型令牌”),它只是使用匿名类来提供类型信息,以便反序列化器可以正确推断出预期的类型;我不记得 Gson 使用了什么类,它应该有类似的东西可用。

如果您唯一拥有的是运行时实例,那么您就不走运了,除了拥有非空 List 并检查其类型(如建议的那样)。

于 2010-08-03T17:29:56.783 回答