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

解决方案 »

  1.   

    静态比较的话,直接用 instanceof 就可以了。动态比较的话,isAssignableFrom() 的用法是:
    SuperClass.class.isAssignableFrom(SubClass.class)UploadDirDTO 并不是 ValidateErrMsg 的子类呀。
      

  2.   

    lz要先确定isAssignableFrom()方法中比较的是什么。是地址还是类型还是别的。然后在找原因。
      

  3.   

    可以获得指向适当的Class对象的引用,Class.getInterfaces()方法返回Class对象的数组,这些对象代表的是某个Class对象所包含的接口。
    同意五楼,isInstanceof需要一个实例!
      

  4.   

    答案没有错啊  UploadDirDTO 并不是 ValidateErrMsg的子类所以isAssignableFrom当然返回 false啦
      

  5.   

    楼主的思路没有问题,abstract interface没见过,应该是abstract class吧,另外forName里的必须是完整类名。还是仔细检查下代码吧。我试验了下,打印出的是true。
      

  6.   

    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());
        }
    }
      

  7.   

    isAssignableFrom并不是返回他的子类,定义不是说看他们是不是继承同样的接口吗,
      

  8.   

    a.isAssignableFrom(b)是判断a是否和b相同或是否是b的超类或接口
    ValidateErrMsg并不是UploadDirDTO的超类更不是UploadDirDTO的接口,当然返回false了