2017-09-20 1 views
-1

개체에 대해 getter 메서드를 호출하려고하는데 getter는 변수의 값에 따라 다릅니다.변수에서 값을 가져온 후 속성 getter를 호출하십시오.

public void met1(String var) { 
    MyClass m = new MyClass(); 

    if(var.equals("A")) 
     m.getA(); 
    if(var.equals("B")) 
     m.getB(); 
    if(var.equals("C")) 
     m.getC(); 
} 

이것은 한 가지 방법입니다. 다른 하나는 switch을 사용할 수 있지만 변경 될 수 있으므로 값을 하드 코딩하고 싶지는 않습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

조금 더 나은 문제를 설명하십시오, 당신의 예에서 다른 몇 가지를 추가합니다. –

+0

@ ÓscarAndreu는 예외를 throw합니다. 그건 내 질문의 일부가 아니야. 각 값을 확인하는 대신 더 좋은 방법이 있는지 확인해야합니다. – user3064103

답변

1

문자열은 기본 유형이 아니며, var와 같은 String 클래스의 인스턴스를 비교할 수 없습니다. ==을 사용하면 작동하지 않습니다.

equals과 같은 방법을 사용해야합니다 (if(var.equals("A")) then ...).
이 방법은 별개입니다.

또 다른 방법은 경우 문없이 반사를 사용하는 것입니다 :

Class<?> c = Class.forName("MyClass"); 
    Object my_object = c.newInstance(); 
    Method setNameMethod = my_object.getClass().getMethod("get"+var,String.class); 
    setNameMethod.invoke(my_object, var); 
+0

감사합니다. 질문을 업데이트했습니다. 하지만 나는 "A", "B", "C"등의 값을 하드 코딩하는 것을 편하게 생각하지 않습니다. – user3064103

+1

** 당신은 ** 하드 코딩을 편안하게 느끼지 않는다는 것을 **는 의미합니까? 문자열을 비교하는 경우 어딘가에 저장해야합니다. 일부 상수 변수/열거 형에있을 수 있습니다. –

관련 문제