如何比较类和接口是不是继承自同样的接口

huayuxing 2009-04-17 09:33:56
com.lbs.leaf.validate.ValidateErrMsg.class.isAssignableFrom(Class.forName("UploadDirDTO"))
-----------------------------------
public abstract interface com.lbs.leaf.validate.ValidateErrMsg extends java.lang.Object implements com.lbs.commons.IPublished, java.io.Serializable {......}
--------------------------------------
import com.lbs.commons.IPublished;

public class UploadDirDTO implements java.io.Serializable, IPublished {...}
-----------------------------------------------
上面是类和接口的定义,
但我用com.lbs.leaf.validate.ValidateErrMsg.class.isAssignableFrom(Class.forName("UploadDirDTO"))比较出来的竞然是false不知道错在哪里了




...全文
157 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
huayuxing 2009-04-17
  • 打赏
  • 举报
回复
isAssignableFrom并不是返回他的子类,定义不是说看他们是不是继承同样的接口吗,
yangkaixin1226 2009-04-17
  • 打赏
  • 举报
回复
帮顶
qybao 2009-04-17
  • 打赏
  • 举报
回复
UploadDirDTO 并不是 ValidateErrMsg的子类
如果要判断二者是否继承或实现同一个超类或接口,可以比较它们的超类和接口看看是否有重合
List<Class<?>> cList1 = Arrays.asList(ValidateErrMsg.class.getInterfaces());
cList1.add(ValidateErrMsg.class.getSuperclass());
List<Class<?>> cList2 = Arrays.asList(UploadDirDTO.class.getInterfaces());
cList2.add(UploadDirDTO.class.getSuperclass());
cList1.retainAll(cList2);
if (cList.size > 0) {
System.out.println("二者有共同超类或接口");
for (Class<?> c : cList1) {
System.out.printf("%s ", c.getName());
}
}
wanglingzhong 2009-04-17
  • 打赏
  • 举报
回复
呵呵呵~~~~
ethan119 2009-04-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ChDw 的回复:]
答案没有错啊 UploadDirDTO 并不是 ValidateErrMsg的子类

所以isAssignableFrom当然返回 false啦
[/Quote]



正解。
ethan119 2009-04-17
  • 打赏
  • 举报
回复
楼主的思路没有问题,abstract interface没见过,应该是abstract class吧,另外forName里的必须是完整类名。还是仔细检查下代码吧。我试验了下,打印出的是true。
lhj_l 2009-04-17
  • 打赏
  • 举报
回复
instanceof()
ChDw 2009-04-17
  • 打赏
  • 举报
回复
答案没有错啊 UploadDirDTO 并不是 ValidateErrMsg的子类

所以isAssignableFrom当然返回 false啦
huayuxing 2009-04-17
  • 打赏
  • 举报
回复
五楼是我自己,兄弟,呵呵,
wanglingzhong 2009-04-17
  • 打赏
  • 举报
回复
可以获得指向适当的Class对象的引用,Class.getInterfaces()方法返回Class对象的数组,这些对象代表的是某个Class对象所包含的接口。
同意五楼,isInstanceof需要一个实例!
rascalboy520 2009-04-17
  • 打赏
  • 举报
回复
先判断有没有超类,如果有,用它去和超类比较
huayuxing 2009-04-17
  • 打赏
  • 举报
回复
而且是动态比较的,不是静态的,我只是直接写了个类名而已,方便大家看一下
huayuxing 2009-04-17
  • 打赏
  • 举报
回复
instanceof不是需要实例的吗,
Dantin 2009-04-17
  • 打赏
  • 举报
回复
instanceof
justinavril 2009-04-17
  • 打赏
  • 举报
回复
instanceof()。
mumu_java 2009-04-17
  • 打赏
  • 举报
回复
lz要先确定isAssignableFrom()方法中比较的是什么。是地址还是类型还是别的。然后在找原因。
捏造的信仰 2009-04-17
  • 打赏
  • 举报
回复
静态比较的话,直接用 instanceof 就可以了。动态比较的话,isAssignableFrom() 的用法是:
SuperClass.class.isAssignableFrom(SubClass.class)

UploadDirDTO 并不是 ValidateErrMsg 的子类呀。
qybao 2009-04-17
  • 打赏
  • 举报
回复
a.isAssignableFrom(b)是判断a是否和b相同或是否是b的超类或接口
ValidateErrMsg并不是UploadDirDTO的超类更不是UploadDirDTO的接口,当然返回false了

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧