我正在尝试使用Java的反射API,并尝试处理一些字段。现在我不得不识别我的字段的类型。字符串很简单,只需执行myField.getType().equals(String.class)
即可。这同样适用于其他非派生类。但是如何检查派生类呢?例如,将LinkedList
作为List
的子类。我找不到任何isSubclassOf(...)
或extends(...)
方法。我需要遍历所有的getSuperClass()
并找到我自己的超类吗?
发布于 2011-01-03 20:59:09
另一个选项是instanceof:
Object o =...
if (o instanceof Number) {
double d = ((Number)o).doubleValue(); //this cast is safe
}
发布于 2015-07-25 00:39:27
这对我来说很有效:
protected boolean isTypeOf(String myClass, Class<?> superClass) {
boolean isSubclassOf = false;
try {
Class<?> clazz = Class.forName(myClass);
if (!clazz.equals(superClass)) {
clazz = clazz.getSuperclass();
isSubclassOf = isTypeOf(clazz.getName(), superClass);
} else {
isSubclassOf = true;
}
} catch(ClassNotFoundException e) {
/* Ignore */
}
return isSubclassOf;
}
发布于 2018-02-01 03:36:40
这是@schuttek答案的改进版本。它得到了改进,因为它正确地为原语返回false (例如isSubclassOf(int.class,Object.class) => false),并且正确地处理接口(例如isSubclassOf(HashMap.class,Map.class) => true)。
static public boolean isSubclassOf(final Class<?> clazz, final Class<?> possibleSuperClass)
{
if (clazz == null || possibleSuperClass == null)
{
return false;
}
else if (clazz.equals(possibleSuperClass))
{
return true;
}
else
{
final boolean isSubclass = isSubclassOf(clazz.getSuperclass(), possibleSuperClass);
if (!isSubclass && clazz.getInterfaces() != null)
{
for (final Class<?> inter : clazz.getInterfaces())
{
if (isSubclassOf(inter, possibleSuperClass))
{
return true;
}
}
}
return isSubclass;
}
}
https://stackoverflow.com/questions/4584541
复制相似问题