我有一个通用方法,它应该查找特定类型的类。我设法将该类设为 Class<?>
,现在我想检查它是否确实是所请求的类型,如果是,则返回它(否则为 null)。似乎唯一有效的代码就是尝试强制转换,如果失败则抛出异常。不过,我担心该代码的性能,因为它会被经常使用,而且我听说抛出异常的性能不是很好。
public static <T> Class<T> getThatClass() {
Class<?> clazz = // some internal lookup
try {
return (Class<T>) clazz;
} catch (ClassCastException e) {
return null;
}
}
有没有办法检查是否 clazz
类型为E
无一异常(exception)?我想要这样的东西,但遗憾的是,它不能编译:
public static <T> Class<T> getThatClass2() {
Class<?> clazz = // some internal lookup
if (clazz instanceof Class<T>) {
return (Class<T>) clazz;
} else {
return null;
}
}
最佳答案
Class.isAssignableFrom(..)
是用于类型检查的非实例变体。用法:
Assert.assertTrue(Number.class.isAssignableFrom(Integer.class));
Assert.assertTrue(Number.class.isAssignableFrom(Double.class));
Assert.assertFalse(Number.class.isAssignableFrom(String.class));
Collection<Integer> c = Arrays.asList(1, 2, 3);
Assert.assertTrue(List.class.isAssignableFrom(c.getClass()));
Assert.assertFalse(Set.class.isAssignableFrom(c.getClass()));
它还包含用于instanceof检查和转换的有用方法:
Assert.assertTrue(List.class.isInstance(c));
List<Integer> list = List.class.cast(c);
关于java - 如何查看 Class<?> 是否实际上是 Class<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59899275/