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

发布于 2024-10-28 02:09:54 字数 841 浏览 1 评论 0原文

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

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

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;

        }

这是如何实现的?

I'm trying to build a generic class loader. I need to check classes that I load against a method argument to determine if they are of the same class.

The code mostly explains what I'm trying to do.

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;

        }

How is this achieved?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白昼 2024-11-04 02:09:54

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

Looks like you need the isAssignableFrom method

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

JavaDoc

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter. It returns true if so; otherwise it returns false. If this Class object represents a primitive type, this method returns true if the specified Class parameter is exactly this Class object; otherwise it returns false.

Specifically, this method tests whether the type represented by the specified Class parameter can be converted to the type represented by this Class object via an identity conversion or via a widening reference conversion. See The Java Language Specification, sections 5.1.1 and 5.1.4 , for details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文