面向对象编程 - java动态加载和类型转换问题?
大家讲道理
大家讲道理 2017-04-18 10:55:19
0
4
523

我有 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();

我应该怎么做呢? 有没有好的建议?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(4)
Ty80

Java Reflection의 사용입니다.
먼저 Class.forName를 통해 클래스의 Class 객체를 얻은 다음, 이 Class 객체의 getMethod 메소드를 통해 지정된 메소드 객체(Method)를 얻어야 합니다. 마지막으로 이 Method 객체를 통해 이 메소드를 호출합니다.
소스 코드에 표시:

으아아아
Peter_Zhu

class.forName은 클래스 객체를 얻습니다. 그러면 이 클래스 객체의 getMethod 메소드를 통해 해당 메소드를 얻을 수 있습니다. 그런 다음 해당 메서드를 호출합니다

Peter_Zhu

이 10개 클래스 모두

와 같은 인터페이스를 구현할 수 있나요? 으아아아

그러면 A1, A2...는 모두 implements A0이고 getResponse을 구현합니다(그러나 정적으로 정의할 수는 없습니다).

그런 다음 다음과 같이 작성할 수 있습니다.

으아아아
PHPzhong

리플렉션 외에도 Spring을 사용할 수도 있습니다. 얻은 문자열을 사용하여 Bean을 가져온 다음 메소드를 호출하십시오.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!