使用反射实例化实现特定接口的 Java 类

2024-01-07

我是反射新手。我看过一些问题和教程。

假设我有一个接口,由 3 个接口实现A、B、C 类

public interface MyInterface {
doJob();

}

现在使用反射我想调用每个类

Class<?> processor = Class.forName("com.foo.A");
Object myclass = processor.newInstance();

我不能将整个过程限制为特定类型,而不是创建一个对象吗? 我只想调用我的界面类型类。

如果我传递 com.foo.A 它应该创建 A 类对象,com.foo.B 应该创建 B 类对象,但是如果我传递一些存在但仍然没有实现 MyInterface 的 com.foo.D 则不应该被调用。

我怎样才能实现这个目标?


try

MyInterface newInstance(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    Class<?> cls = Class.forName(className);
    if (!MyInterface.class.isAssignableFrom(cls)) {
        throw new IllegalArgumentException();
    }
    return (MyInterface) cls.newInstance();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用反射实例化实现特定接口的 Java 类 的相关文章

随机推荐