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

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不知道错在哪里了




...全文
108 点赞 收藏 18
写回复
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了
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告