首页 >Java >java教程 >如何以编程方式查找在 Java 中实现给定接口的所有类?

如何以编程方式查找在 Java 中实现给定接口的所有类?

DDD
DDD原创
2024-12-05 01:45:11456浏览

How Can I Programmatically Find All Classes Implementing a Given Interface in Java?

以编程方式检索 Java 中接口的类实现

Java 反射提供了用于内省类和接口的灵活机制。在这种情况下,开发人员可以利用反射来检索实现特定接口的所有类的列表。

基于反射的方法

使用 反射 库,开发人员可以轻松检索接口的子类如下所示:

Reflections reflections = new Reflections("firstdeveloper.examples.reflections");
Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);

ServiceLoader 方法

Java ServiceLoader 提供了另一种发现接口实现的方法。此技术需要将接口定义为服务提供者接口 (SPI) 并声明其实现:

ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class);
for (Pet implClass : loader) {
    System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat
}

包级注释方法

With package -级别注释,我们可以在package-info.java中声明接口的实现file:

@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class})
package examples.reflections;

然后,我们可以使用反射检索这些实现:

Package[] packages = Package.getPackages();
for (Package p : packages) {
    MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class);
    if (annotation != null) {
        Class<?>[] implementations = annotation.implementationsOfPet();
        for (Class<?> impl : implementations) {
            System.out.println(impl.getSimpleName());
        }
    }
}

以上是如何以编程方式查找在 Java 中实现给定接口的所有类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn