2010-07-15 30 views
1

我想知道如何(如果可能)在运行时确定类的泛型参数。从我读过的这个泛型类的子类是可能的,但我还没有能够找到如何使用类型本身。这些链接中有一些很好的信息,但我不确定这是我正在寻找的。确定Java运行时的泛型参数

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

什么,我最终要完成的,是让GSON序列化上面的“_bucket”变量,作为类类型'T'的名称。

我会很感激,如果有人能指出我在正确的方向。

+0

解决方案它存储一个'私有最终类 typeParam'并将其传递给构造函数。 – ILMTitan 2010-07-15 21:15:54

回答

6

在给定示例中,泛型类型在运行时不可用。例如,如果在编译时—中指定了泛型类型信息,则只有在定义了子类SomeTypeJson extends Json<SomeType>的情况下才可以通过反射来使用该信息。

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

+0

谢谢埃里克森,我会看到有关解决方法。 – 2010-07-15 21:00:14

0

通常情况下,您会将此类型的子类别赋予具体类型,然后处理程序包应该能够正确解析类型。 或者许多包都有某种类型引用(“类型标记”)的概念,它只是使用匿名类来提供类型信息,以便解串器可以正确地推断出预期的类型;我不记得Gson使用的是什么类,应该有这样的东西。

如果您拥有的唯一东西是运行时实例,那么您运气不好,除非有非空列表并检查其类型(如建议)。