通用Class <t>中的T类是否可以从另一个类分配?</t>

时间:2009-07-07 12:43:07

标签: java generics class

修改 由于有很多事情和人们不理解我的要求,我会改写:

我如何在运行时发现foo被归类的类是什么?

public boolean doesClassImplementList(Class<?> genericClass)
{
  // help me fill this in
  // this method should return true if genericClass implements List
  // I can't do this because it doesn't compile:
  return genericClass instanceof List;
}

4 个答案:

答案 0 :(得分:9)

Class.isAssignableFrom

答案 1 :(得分:0)

你不能用Java(type erasure

答案 2 :(得分:0)

您应该使用Class.forName(“fully_qualified_name”)来生成Class对象,或者对已经实例化的对象使用.getClass()方法。此外,对于int类型,该类在Integer.TYPE属性中定义。

我需要更多一点澄清你想要做什么,匹配相同的类型?你可以使用多种方法,最终目标是什么?

好的,既然你已经澄清了...继承人的帮助......只是通过一堂课......

public boolean doesClassImplementList(Class genericClass)
{
  // help me fill this in
  // this method should return true if genericClass implements List
  // I can't do this because it doesn't compile:

  //this will give you a a list of class this class implements
  Class[] classesImplementing = genericClass.getInterfaces();

  //loop through this array and test for:
  for(int i=0; i<classesImplementing.length; i++) {
   if (classesImplementing[i].getName().equals("java.util.List")) {
    return true;
   }
  }
  return false;
}

答案 3 :(得分:0)

Class<Integer>是一个类型声明,你不能像在第一行那样将它分配给变量。

Class<Integer>基本上是一种引用Integer类型的方法,因此您可以将其作为参数传递。它确实会影响某些方法(例如强制转换),但它基本上是一种为方法提供泛型参数并将其与类型相关联的方法。

例如:

public <T> T someMethod(Object someObject, Class<T> castTo) {
     return castTo.cast(someObject);
}