2012-09-16 3 views
0

가능한 중복 : 다른 변수에서 변수를 만드는 방법은 무엇입니까?


Dynamic Variable Names in Java:

이의 내가 아래와 같은 문자열이 있다고 가정 해 봅시다.

String s = "Hello"; 

이제 문자열을 만들고 싶지만 문자열의 변수는 "Hello"라고합니다. 문자열의 이름을 "Hello"로 만들려면 "Hello"라는 이름을 얻기 위해 문자열 s에 액세스해야하므로 변수 이름으로 사용할 수 있습니다. 아래는 내가보고 싶은 것입니다.

String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello"; 

나는 자바 초보자이기 때문에 노력 해 주셔서 감사합니다. : D

+4

1. 왜 그렇게하고 싶습니까? 아마 당신이 원하는 것을 할 수있는 더 좋은 방법이 있습니다 ... 2. 자바 초보자를 이해하기 쉽지 않은 리플렉션 API를 통해 수행 할 수 있습니다. – assylias

+1

@Sayem과 동의하고 닫으려는 투표. 포스터는 Sayem이 제공하는 링크를 확인하십시오. 여기와 링크에서 언급했듯이, 이것은 Java의 * way *가 아닙니다. String 변수를 String에 연결하려면'Map '을 사용하는 것이 더 좋습니다. –

+0

리플렉션을 사용하여 어떻게 수행 할 수 있습니까? Java에는 동적 변수가 없습니다. – Anton

답변

0

자바에서는 불가능합니다.

HashMap과 같이 map 인터페이스의 구현을 사용하는 것만 할 수 있습니다. put 메서드를 사용하면 주어진 '이름'에 값을 '할당'할 수 있습니다. 이름은 key이고지도 내에서 고유해야합니다. 변수의 범위 내에 고유 한 이름이있는 것과 같습니다.

value을 검색하려면 key (예 : 'Hello')을 인수로 사용하여 get 메서드를 호출하십시오.

+3

실제로 권장되지는 않지만 클래스 필드에서는 실제로 기술적으로 가능합니다. 이런 종류의 일은 여기에서 반복해서 논의되었습니다. –

+0

[Eng.Fouad 's Post] (http://stackoverflow.com/a/12446884/1598508)에 표시된대로 동의합니다. 그러나 대부분의 동작은 기본 Java 인터페이스를 사용하여 수행 할 수 있습니다. 반사가 절대적으로 피할 수없는 경우 사용해야합니다. –

3

간접 지정 계층을 추가하려고합니다. Java/C/C++/Pascal/etc와 같은 정적 언어로 변수에 동적으로 액세스 할 수 없습니다.

동적 언어가 사용하는 다이내믹 컨텍스트를 에뮬레이션 할 수 있습니다. 예를 들어 맵을 만들어 변수 이름과 값을 보유 할 수 있습니다 이 경우 당신은 당신이 개체입니다 오브젝트를 가리키는 변수 (참조) 이름을 얻을 수 없습니다 자바에서는

Map<String,String> stringVars = new HashMap<String,String>(); 

// set a "variable" 
stringVars.put("Hello", "value"); 

// get a "variable" 
System.out.println(stringVars.get("Hello")); 
0

그것의 참조에 대한 지식이없는 것 두 개 이상의 변수를 다스 려있을 수 있습니다 같은 대상으로.

한편으로는 다음과 같이 할 수 있습니다. 하지만 도움이 될 방법을 알고하지 않습니다

String s = "Hello"; 
Reference<String> hello = new SoftReference<String>(s); 
String myStringAccessedWithHello = hello.get(); 
2

반사를 사용 (권장하지 않음) :

public class MainClass 
{ 
    public String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello"; 

    public static void main(String[] args) throws Exception 
    { 
     MainClass m = new MainClass(); 

     String s = "Hello"; 
     String result = (String) MainClass.class.getField(s).get(m); 
     System.out.println(result); 
    } 
} 

OUTPUT : 다른 사람이 그림과 같이

I want to do this, But from Accessing String s So I KNOW that String s = Hello 

가 대신지도를 사용합니다.

0

"Hello"와 같은 문자열을 사용하고 다른 문자열 ("이 작업을 수행하고 싶습니다. 그러나 문자열에 액세스 할 수 없으므로 String을 s = Hello로 알 수 있습니다"와 같은)).다음과 같은 뭔가 :

Map<String, String> stringMap = new HashMap<String, String>(); 
stringMap.put("Hello", "I want to do this, But from Accessing String s So I KNOW that String s = Hello"); 

그런 다음 (예 : "안녕하세요"로) 맵에 키 값을 모두 찾을 수 있습니다 호출하여 :

Set<String> stringKeys = stringMap.keySet(); 

당신은에 속하는 긴 문자열을 조회 할 수 있습니다 키 "Hello"는 다음과 같습니다.

String longValue = stringMap.get("Hello"); 

이렇게 간단한 문자열 값을 사용하여 다루기 힘든 문자열 값을 찾습니다. String 값을 다른 유형의 객체에 매핑하는 Map을 사용할 수도 있습니다.

관련 문제