在 Java 中以编程方式查询接口实现
检索实现接口的类列表可能具有挑战性。幸运的是,Java 提供了多种方法来解决此查询:
使用 Reflections 库:
Reflections 是一个流行的库,允许开发人员检查和操作有关类和类的元数据包。使用 Reflections,您可以获得实现给定接口的子类列表:
Reflections reflections = new Reflections("my.package"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
利用 ServiceLoader:
ServiceLoader 提供了一种独立于平台的机制来发现兼容的实现服务提供者接口。这种方法需要将您的接口定义为服务提供者接口并声明其实现。设置此基础设施后,您可以获得如下实现:
ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class); for (Pet implClass : loader) { System.out.println(implClass.getClass().getSimpleName()); }
使用包级注释:
包级注释提供了一种注释方法带有元数据的包。可以利用此功能来标记包及其包含的类的信息。要利用此方法:
定义自定义注释来标识实现类:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface MyPackageAnnotation { Class<?>[] implementationsOfPet() default {}; }
将注释应用到源代码:
@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class}) package my.package;
查询已实现类:
Package[] packages = Package.getPackages(); for (Package p : packages) { MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class); if (annotation != null) { Class<?>[] implementations = annotation.implementationsOfPet(); System.out.println("Found implementation: " + implementations[0].getSimpleName()); } }
这些技术提供了获取实现指定接口的类列表的灵活性。
以上是如何以编程方式查找在 Java 中实现特定接口的类?的详细内容。更多信息请关注PHP中文网其他相关文章!