java 是否子类_检查一个类是否是Java中另一个类的子类

问题

我正在玩Java的反射API并试图处理一些字段。现在我一直在确定我的领域类型。字符串很简单,只需要myField.getType().equals(String.class)。这同样适用于其他非派生类。但是我如何检查派生类?例如,585809979是List的子类。我找不到任何isSubclassOf(...)或extends(...)方法。我是否需要完成所有getSuperClass()并自己找到我的supeclass?

#1 热门回答(311 赞)

你想要这个方法:

boolean isList = List.class.isAssignableFrom(myClass);

一般情况下,List(上图)应替换为superclass和myClass应替换为subclass

从7925252072:

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。

参考:- Class.isAssignableFrom(Class)

相关:

a)检查Object是否是编译时知道的类或接口(包括子类)的实例:

boolean isInstance = someObject instanceof SomeTypeOrInterface;

例:

assertTrue(Arrays.asList("a", "b", "c") instanceof List>);

b)检查Object是否是你在运行时只知道的类或接口(包括子类)的实例:

Class> typeOrInterface = // acquire class somehow

boolean isInstance = typeOrInterface.isInstance(someObject);

例:

public boolean checkForType(Object candidate, Class> type){

return type.isInstance(candidate);

}

#2 热门回答(22 赞)

另一种选择是instanceof:

Object o =...

if (o instanceof Number) {

double d = ((Number)o).doubleValue(); //this cast is safe

}

#3 热门回答(8 赞)

实例上的instanceofworks,即在Objects上。有时你想直接与班级一起工作。在这种情况下,你可以使用Class类的asSubClass方法。一些例子:

Class o=Object.class;

Class c=Class.forName("javax.swing.JFrame").asSubclass(o);

这将顺利进行,因为JFrame是Object的子类。 c将包含一个表示JFrame类的Class对象。

Class o=JButton.class;

Class c=Class.forName("javax.swing.JFrame").asSubclass(o);

这将启动ajava.lang.ClassCastException,因为JFrame不是JButton的子类。 c不会被初始化。

Class o=Serializable.class;

Class c=Class.forName("javax.swing.JFrame").asSubclass(o);

这将顺利进行,因为JFrame实现了java.io.Serializable接口。 c将包含一个表示JFrame类的Class对象。

当然必须包括所需的进口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值