return class 使用反射实现接口

return a class implementing an interface using reflections

我正在使用反射查找所有 classes 实现 IAnimal 接口。 但是我如何使用下面代码中设置的动物 return 一个 class 实例:

Reflections reflections = new Reflections(IAnimal.class);    
Set<Class<? extends IAnimal>> animals= reflections.getSubTypesOf(IAnimal.class);

我有 3 个 classes 实现了 IAnimal 接口 Dog、Cat、Duck。我想应用这个逻辑,但我不知道该怎么做。

    method findAnimal(String animalName){

        for (Iterator<Class<? extends Operations>> it = animals.iterator(); it.hasNext(); ) {
            String classname=it.Name;
            if (classname.eqauls(animalName)){
               System.out.println("found");
                return new class(); }
        }}

如果与传递的字符串匹配,我希望 findAnimal 方法 return 一个 class 实例。即,如果我将“Dog”字符串作为参数传递,该方法将 return a dog class.

是否可以这样做,关于如何实现上面框中的逻辑有什么想法吗?

所以这基本上归结为如何创建一个具有代表该类型的 java.lang.Class 的实例?

您可以使用以下代码创建实例:

Class<?> cl = it.next();
... if condition, you decide to create the instance of cl

IDog object= cl.getDeclaredConstructor().newInstance(); // will actuall be a Dog, Cat or whatever you've decided to create

请注意,您已假定存在默认构造函数(不带参数的构造函数)。这种假设是必要的,因为你必须知道如何创建你感兴趣的class对象。

如果您知道您的构造函数接受一些特定参数(特定类型),您可以将参数类型传递给 getDeclaredConstructor 方法。例如,对于 class Integer 的构造函数有一个 int 参数,以下将打印“5”:

Integer i = Integer.class.getDeclaredConstructor(int.class).newInstance(5);
System.out.println(i);