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);
我正在使用反射查找所有 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);