修改 由于有很多事情和人们不理解我的要求,我会改写:
我如何在运行时发现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;
}
答案 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);
}