如何检查作为Class对象的参数的instanceof?

时间:2011-03-30 01:30:40

标签: java class classloader instanceof

我正在尝试构建一个通用的类加载器。我需要检查我对方法参数加载的类,以确定它们是否属于同一个类。

代码主要解释我正在尝试做什么。

private static LinkedList<Object> loadObjectsInDirectory(Class class0, File dir) throws ClassNotFoundException {

            LinkedList<Feature> objects = new LinkedList<Object>();

            ClassLoader cl = new GenericClassLoader();

            for(String s : dir.list()) {
                Class class1 = cl.loadClass(s);
                try {
                    Object x = class1.newInstance();
                    if (x instanceof (!!! class0 !!!) ) {
                        objects.add(x);
                    }
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                }

            }

            return objects;

        }

这是如何实现的?

1 个答案:

答案 0 :(得分:19)

看起来您需要isAssignableFrom方法

if (kelass.isAssignableFrom(klass)) {
   objects.add(x);
}

的JavaDoc

  

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

     

具体来说,此方法测试是否可以通过标识转换或扩展引用转换将指定的Class参数表示的类型转换为此Class对象表示的类型。有关详细信息,请参阅Java语言规范,第5.1.1和5.1.4节。