2013-08-19 2 views
1

나는이 같은 클래스에서 상수의 목록을 가지고있다구문 분석 문자열 코드

public class MapDialogue{ 

    Constants c1 = new Constants(); 

    public String mappingLabels(String node){ 
     String text = "c1."+node+"_label"; 

     //Is there someway of parsing this text as code 
     //like in unix shell scripting? 
    } 
} 
+1

의 일종을 사용하여 더 나은 것 member/fieldValues.html) -하지만 코드를 재 설계하여 전혀 필요가 없도록 할 수 있습니다. – assylias

+0

[http://stackoverflow.com/questions/935175/convert-string]의 가능한 복제본 -to-code] (http://stackoverflow.com/questions/935175/convert-string-to-code) –

+1

@MartinFahl 그건 전혀 중복되지 않습니다 ... – assylias

답변

2

예, Reflection을 사용할 수 있습니다.

  • 왜 클래스하지 정말 상수의 상수 : 나는 몇 가지에 대해 가지 확실하지 오전, 비록

    String value = (String)Constants.class.getDeclaredField(node).get(c1);

    : 그리고 코드는 다음과 같을까요? (상수는 정적이고 최종적인 것으로 가정 됨)

  • Constants 클래스를 인스턴스화하는 이유는 무엇입니까? Constants.FIELD_NAME처럼 액세스해야합니다.
  • 첫 번째 코멘트에서 assylias의 조언을 듣고 항상 반사를 사용하지 않으려 고 할 수도 있습니다. 비용이 적게 드는 다른 방법이있을 수 있습니다.
  • 내가 귀하의 경우 가정

, 당신은 가장 가능성 http://docs.oracle.com/javase/tutorial/reflect/ [반사] (예이 호출 Map

+0

레이블을 변경하거나 사용자 정의 할 수있는 유연성을 사용자가 원했기 때문에이를 상수로 선언하지 않았습니다. – vhora

+0

글쎄, 수업 이름이 오도 된 것 같습니다. –

+0

안녕하세요, 나는 반성과 노력, 그리고 그 잘 작동합니다. 약 200 개의 변수 이름이 있습니다. 올바른 일이 무엇인지에 대한 아이디어가 있습니까? 반사 또는 해시 맵? – vhora

0

는 예,이 그것을 달성하는 방법. Field API에있는 Reflection 패키지를 통해 그렇게 할 수 있습니다. 이에 대한 Java 자습서는 here에 있습니다. Constants 파일은 일반적으로 public static final로 회원을 가지고, 보조 노트로

Field yourField = c1.getClass().getDeclaredField(yourString); 

:

기본 개념이다. 이러한 수정자를 사용하면 Constants의 인스턴스를 만들 필요가 없으며 값도 수정할 수 없습니다.