찾다

 >  Q&A  >  본문

面向对象编程 - java动态加载和类型转换问题?

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

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

大家讲道理大家讲道理2804일 전542

모든 응답(4)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:57:19

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

    으아아아

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:57:19

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

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:57:19

    이 10개 클래스 모두

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

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

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

    으아아아

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:57:19

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

    회신하다
    0
  • 취소회신하다