【问题标题】:How to check instanceof on an argument that is a Class object?如何检查作为 Class 对象的参数的 instanceof?
【发布时间】:2011-03-30 01:30:39
【问题描述】:

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

代码主要解释了我想要做什么。

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;

        }

这是如何实现的?

【问题讨论】:

  • "kelass"??!?为什么人们必须继续使用“类”的创造性替代拼写,例如“klass”,“clazz”,而不是简单且不那么刺耳的“class0”或“class1”或“cl”或其他什么?

标签: java class classloader instanceof


【解决方案1】:

看来您需要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 节。

【讨论】:

  • 而且,当然,不再需要实例化类来加载它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多