2012-05-11 5 views
0

나는 이것이 불가능하다는 것을 확신하지만, 어쨌든 물어볼 것입니다.도트 연산자 내부의 문자열

자바에서는 도트 연산자를 사용하여 메소드 이름 (또는 다른 것) 대신 문자열을 사용하는 방법이 있습니까?

예 : java.stringname.NumericShaper(); where stringname = "awt.font"

반복적 인 코드에 반복적 인 코드를 넣으려고합니다. 예를 들어, 내 변수 중 하나는 "Settings.can1.baud"이고, 루프를 돌 때마다 "can1"부분을 반복하고 싶습니다. 아마도 이것을 할 수있는 더 좋은 방법이 있을까요? 당신이 의미하는 경우

내가 자바 프로그래밍에 새로 온 사람, 그래서 어떤 의미를 만들어 그 모르겠어요 ...

+3

[리플렉션] (http://java.sun.com/developer/technicalArticles/ALT/Reflection/)을 시도하십시오. – zneak

답변

2

당신은 등, 회원의 무리가 can1, can2, can3라는이 대신 array 또는 collection을 사용해야합니다.

reflection을 사용하여 원하는대로 할 수 있습니다. 그러나이 경우에는 피칭 (fiddly), 나쁜 습관 (종종)이 필요하며 불필요합니다.

try { 

     //loop over stringnames? 
     String stringname = "awt.font"; 
     Class<?> numericShaperClass = Class.forName("java." + stringname + ".NumericShaper"); 


     NumericShaper numericShaper = (NumericShaper) numericShaperClass.newInstance(); 

    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
} 

귀하의 질문의 두 번째 부분에 관해서는, 당신은 Class.getField() 메소드를 사용하여 속성 클래스의 멤버 변수에 액세스 할 수 있습니다

2

당신이 사용하는 반사를 할 수 있습니다.

리플렉션을 사용하면 과도한 상황 일 수 있으며 코드를 읽을 수없고 코드가 느려질 수 있습니다.