2011-01-05 59 views
0

通用型我有一个看起来像如何提取从ARG

public void (Foo<T> foo) 

在这种方法中,我需要调用了

Class<T> clazz

作为参数的方法的方法签名。我如何从foo获得类型为Class<T>的参考?谢谢

回答

3

由于类型擦除,你不能直接获取类型参数。这些信息在运行时根本不存在。 API需要参考类型参数的类需要采取类的对象实例...

公共无效ABC(美孚< T> FOO,<类T> clazz所)

+0

Java 7的是应该将具体化泛型类型与您将能够解决这个问题 – LINEMAN78 2011-01-05 01:56:32

0

你确定你的方法签名是正确的?

我认为,如果没有T类你不能让的说法看起来像

public void method(Class<T> obj){ 
} 

类型参数必须存在,所以你已经知道的传入的类型。
当你把它变成这样:

public <T> void method(T u){ 
    System.out.println("U: " + u.getClass().getName()); 
} 

你应该能够得到的类名或刚下课参考,不?

文档:
http://download.oracle.com/javase/tutorial/java/generics/genmethods.html

+0

是的,我无意中省略。好建议,我会试试看。 – Andrew 2011-01-05 03:47:50

+0

让我知道是否有帮助:) GL;) – 2011-01-05 13:46:50