如何获取generics方法参数的类型参数类?

如何获取传递给方法的参数的类型参数? 比如我有

List list = new ArrayList(); public class Datastore { public  void insert(List tList) { // when I pass the previous list to this method I want to get Person.class ; } } 

由于类型擦除,唯一可行的方法是将类型作为参数传递给方法。

如果您可以访问数据存储区代码并且可以修改,则可以尝试执行此操作:

 public class Datastore { public T void insert(List tList, Class objectClass) { } } 

然后通过这样做来调用它

 List pList = new ArrayList(); ... dataStore.insert(pList, Person.class); 

我在这类问题中看到的每个响应都是将类作为参数发送给方法。

由于类型擦除,我怀疑我们是否可以得到它,除非可能能够做到这一点的reflection魔法。

但是如果列表中有元素,我们可以联系它们并在它们上调用getClass。

你可以尝试这个……

 if(tList != null && tList.size() > 0){ Class c = tList.get(0).getClass(); } 

我想你不能这样做。 看看这堂课:

 public class TestClass { private List list = new ArrayList(); /** * @param args * @throws NoSuchFieldException * @throws SecurityException */ public static void main(String[] args) { try { new TestClass().getClass().getDeclaredField("list").getGenericType(); // this is the type parameter passed to List } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } new TestClass(). insert(new ArrayList()); } public  void insert(List tList) { ParameterizedType paramType; paramType = (ParameterizedType) tList.getClass().getGenericInterfaces()[0]; paramType.getActualTypeArguments()[0].getClass(); } } 

您可以从类或字段中获取类型参数,但它不适用于generics方法。 尝试使用非generics方法!

要么

另一种解决方案可能是将实际的Class对象传递给方法。