如何检查一个类型是否是另一个类型的子类?

5
我需要检查通过Field.getType()方法获取的反射Field类型实例是否是另一个继承特定类GenericModel的类的实例。
我正在尝试以下伪代码片段:
if(field.getType() "is_a_superclass_of" GenericModel) {
    ... then do something with it
}

我该怎么做呢?

当我尝试以下代码时:

field.getType().isAssignableFrom(Language.class)

我得到了一个结果,true,这意味着它是Language类的实例,该类继承自GenericModel。然而;
field.getType().isAssignableFrom(GenericModel.class)

返回false?

field.getType() == "za.co.company.package.model.Language"
3个回答

7
您把测试反了。
GenericModel.class.isAssignableFrom(field.getType())

+1 我总是在使用这个之前不得不暂停 - 以某种方式它似乎是在反直觉的方向上。field.getType().isAssignableFrom(Language.class) 返回 true 的原因是因为 Language 是字段类型的子类,而不是相反的情况(可能字段本身就是一个 Language)。 - Bohemian
这是我的答案,因为你先发了!非常感谢你的帮助! - josef.van.niekerk
是的,我犯过很多次这个错误。我想这是因为 instanceof 等从左到右执行的缘故。 - jontro

3
尝试一下
GenericModel.class.isAssignableFrom(field.getType())

1

你可能想要反转你的验证顺序:

  GenericModel.class.isAssignableFrom(field.getType());

在这段代码中,你询问了GenericModel是否是"field.getType()"的超类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接