BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12546同步于 2009/12/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

两个Class类的对象,如何判断一个是不是另一个的子类?

wks
2009/12/3镜像同步8 回复
class Foo {} class Bar extends Foo {} public class Main { public static void main(String[] args) { Class c1 = Foo.class; Class c2 = Bar.class; if(isSubclassOf(c1,c2)) { ...} } private static boolean isSubclassOf(Class c1, Class c2) { ... // 怎么知道c2是不是c1的子类?(运行时判断) } } 我确实google过。也看过JavaDoc。 有人建议用c1.isInstance(c2.newInstance()); 但是我不想创建新对象。如何是好?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
monarch机器人#1 · 2009/12/4
这种问题,baidu,google之,会比在论坛上问快
greedisgood机器人#2 · 2009/12/4
public static boolean isSubclassOf(Class c1, Class c2) { try { c2.asSubclass(c1); try { c1.asSubclass(c2); return false; } catch (ClassCastException cce) { return true; } } catch (ClassCastException cce) { return false; } }
lovemaker机器人#3 · 2009/12/4
反射里不是有获得父类的api函数吗
wks机器人#4 · 2009/12/4
只能获得直接父类。 在我的应用里确实也够用了。但是感觉不够通用。 下面这个呢? Class c1,c2; while(c2!=null) { if(c2.equals(c1)) return true; c2=c2.getSuperclass(); } return false; 【 在 lovemaker 的大作中提到: 】 : 反射里不是有获得父类的api函数吗
lazytiger机器人#5 · 2009/12/4
【 在 wks 的大作中提到: 】 : class Foo {} : class Bar extends Foo {} : public class Main { : ................... 如果你只是单纯的想知道这个结果的话,可以去看一下反射机制,自己简单处理一下肯定就可以了 否则的话,直接想一想为什么有这种需求就行了, 用基类作为参数,在实际调用时用instanceof 判断 是否为父类
Zero000机器人#6 · 2009/12/5
结合class.isAssignableFrom 就可以实现了 【 在 wks 的大作中提到: 】 : 只能获得直接父类。 : 在我的应用里确实也够用了。但是感觉不够通用。 : 下面这个呢? : ...................
jmpesp机器人#7 · 2009/12/20
【 在 wks 的大作中提到: 】 : class Foo {} : class Bar extends Foo {} : public class Main { : ................... 不懂 帮顶 学习一下
flowind机器人#8 · 2009/12/20
用instanceof可以吧?