2011-11-14 2 views
1

Java에서 두 개의 변수 x1xName이 있다고 가정합니다.변수를 정의하기 위해 다른 변수를 사용하여 하나의 변수를 0으로 만들려면 어떻게해야합니까?

xName을 사용하면 어떻게 x1을 0으로 할 수 있습니까?

xName의 값은 "x1"입니다. x1의 값을 xName으로 변경하려면 어떻게해야합니까?

난 그냥 0

편집에 1 개를 변경하지 않는 내 이유가있다 : 명확히하기 위해, 나는 1 개를 정의하는 XName이를 사용하고 싶습니다.x1 = 1 인 경우 이 작업을 수행하려면 기본적으로 xName = 0. xName의 값이 "x1"이므로 x1이 0이됩니다. 나는 전에 그것을 보지 못했습니다. 이것이 가능한지 궁금합니다.

+0

그래서 xName은 프로그램 내부의 변수 이름입니까? –

+0

아니, 나는 그런 뜻. 나는 x1을 정의하기 위해 xName을 사용하고자한다.x1 = 1 인 경우 이 작업을 수행하려면 기본적으로 xName = 0. xName의 값이 "x1"이므로 x1이 0이됩니다. 무슨 뜻인지 알 겠어? 나는 전에 이것을 보지 못했습니다. 이것이 가능한지 궁금합니다. – user1012016

+0

위의 편집에서 제안하는 정확한 구문을 사용할 수 없습니다. –

답변

2

반사를 사용하십시오. 다음은 official tutorial입니다.

+1

반사는 단순하지 않고 효과적이지 않으며 권장되지 않는다. 그것이 다른 방법으로 행해질 수 있다면 그것은 선호 될 것입니다. 그러나 좋은 충분한 이유가있다. 그것은가는 길입니다. –

3

xName에 들어있는 변수를 0으로 설정 하시겠습니까?

x1이 클래스 필드이면 리플렉션을 사용하여 필드 값을 설정할 수 있습니다. 예외는 처리하지 않습니다.

public class ChangeField { 

    public int x1 = 5; 
    public int x2 = 7; 

    public static void main(String[] args) throws Exception { 
     ChangeField changeField = new ChangeField();   
     System.out.println("Before " + changeField); 
     changeField.reset("x1"); 
     System.out.println("After " + changeField); 
    } 

    private void reset(String xName) throws Exception { 
     getClass().getDeclaredField(xName).setInt(this, 0); 
    } 

    @Override 
    public String toString() { 
     return String.format("x1=%1$s x2=%2$s", x1, x2); 
    } 
} 
0

는 주위의 코드를 변경 할 수있는 금액에 따라, 당신은지도를 시도 할 수 있습니다 :

Map<String, Integer> mappings = new HashMap<String, Integer>(); 
mappings.put(xName, x1); 

// delegates setting the value to the Map 
void setValue(String variableName, int variableValue) { 
    this.mappings.put(variableName, variableValue); 
} 

// delegates getting the value to the Map. 
void getValue(String variableName) { 
    return this.mappings.get(variableName); 
} 

은 분명히 대표가 엄격하게 필요하지 않습니다.

관련 문제