以编程方式检索 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中文网其他相关文章!