7

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

该代码主要解释了我正在尝试做的事情。

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;

        }

这是如何实现的?

4

1 回答 1

19

看起来你需要isAssignableFrom方法

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

JavaDoc

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回false。

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

于 2011-03-30T01:34:54.450 回答