Maison > Questions et réponses > le corps du texte
我有 A1.java, A2.java, A3.java ... A10.java 等十个类(也许更多);
他们里面都有一个public static String getResponse()
的方法,不过里面所做的事情和回复的字符串都不一样;
我还有一个变量 String name = "A1";
,不确定变量里面的到底是哪一个类的名字,不过肯定是这是个类里面的一个。
我想当我收到这个name变量之后动态调用所对应的类的get
Response方法,而且不想用if-else一个个判断。
试了下下面的代码,forName回复的是一个class对象,好像不能强制类型转换。能转换也不知道到底转换成哪一个对象,我不想一个个if-else判断。
String result = Class.forName(name).getResponse();
PHP中文网2017-04-18 10:57:19
C'est l'utilisation de la réflexion Java.
Vous devez d'abord obtenir l'objet Class d'une classe via Class.forName
, puis obtenir l'objet méthode spécifié (Méthode) via la méthode getMethod
de cet objet Class, et enfin via cet objet Method pour appeler cette méthode.
Représenté dans le code source :
public class Test {
public static String getResponse() {
return "This is Test.getResponse";
}
public static void main(String[] args) throws Exception {
String name = "com.test.Test";
String methodName = "getResponse";
Class<?> threadClazz = Class.forName(name);
Method method = threadClazz.getDeclaredMethod(methodName);
System.out.println(method.invoke(null));
}
}
天蓬老师2017-04-18 10:57:19
class.forName obtient l'objet de classe. Ensuite, vous pouvez obtenir la méthode correspondante via la méthode getMethod de cet objet de classe. Invoquez ensuite la méthode correspondante
天蓬老师2017-04-18 10:57:19
Toutes ces 10 classes peuvent-elles implémenter une interface, telle que
public interface A0 {
public String getResponse();
}
Alors A1, A2... sont tous implements A0
et implémentent getResponse
(mais ils ne peuvent pas être définis comme statiques).
Ensuite vous pouvez écrire :
String result = ((A0) Class.forName(name).newInstance()).getResponse();
PHPz2017-04-18 10:57:19
En plus de la réflexion, vous pouvez également utiliser Spring. Utilisez la chaîne obtenue pour obtenir un bean, puis appelez la méthode.