런타임에 코드에 인스턴스화 된 객체를 가져올 수 있습니까? 그런문자열로 인스턴스 객체 가져 오기
뭔가를해야만 :
public String xyz = "aaaa_bbb";
getObject("xyz").some function of String (e.g.: .split("_"))
감사
런타임에 코드에 인스턴스화 된 객체를 가져올 수 있습니까? 그런문자열로 인스턴스 객체 가져 오기
뭔가를해야만 :
public String xyz = "aaaa_bbb";
getObject("xyz").some function of String (e.g.: .split("_"))
감사
여기 예를
을, 당신은이 같은 이름을 얻을 수 있습니다. 그것은 당신이 호출하려고하는 로컬 방법 변수가 있다면
import java.lang.reflect.Method;
public class Test {
public String stringInstance = "first;second";
public void Foo() {
try {
Object instance = getClass().getDeclaredField("stringInstance").get(this);
Method m = instance.getClass().getMethod("split", String.class);
Object returnValue = m.invoke(instance, ";");
if(returnValue instanceof String[])
{
for(String s : (String[])returnValue)
{
System.out.println(s);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String a[]){
new Test().Foo();
}
}
, 당신은 아마 호출 스택 Thread.currentThread().getStackTrace()
에서 현재 방식에서의 변수에서 얻을 수 있습니다.
안녕하세요, 저는 이미 당신처럼 구현하고 있지만 이것은 제 문제입니다. m.invoke (stringInstance, ";"); stringInstance는 m.invoke ("stringInstance", ";")와 같은 String이어야합니다. – user630447
@ user630477 조금 편집했습니다. 확인 해봐. –
대단히 고마워,이게 내가 찾고 있던거야 – user630447
당신은 질문을 바꿔해야 할 수도 있습니다. 그냥 "AAAA"초기 문자열에서 "BBB"문자열을 얻고 싶은 경우에
, 당신은 당신이 요구하는 무엇인지 확인하기 어렵다 StringTokenizer
사용할 수 있지만하여 필드 값을 가져올 수 있습니다 이름은 리플렉션을 사용합니다. 이런 식으로 뭔가가 :
Class c = this.getClass(); // or Someclass.class
Field f = c.getDeclaredField("xyz");
String value = (String) f.get(this);
... = value.split("_");
코멘트가 지적한대로 정말 연관 배열을 구현하려는 경우
그러나, 거기에 (내가 ... 예외 처리를 많이 남겨 두었다) 자바에서 이것을하는 더 좋은 방법; 예 : Map
클래스를 사용합니다.
jPanel에 사용자 지정 구성 요소가 있고이를 다시 그리지 않고 작업하고 싶습니다. 나는 목록이나 맵을 사용할 수 있다고 생각하지만지도의 값을 변경 한 다음 맵에서 정보가 포함 된 GUI를 다시 그려야합니다. – user630447
문자열이 객체의 구성원 필드 인 경우 Field
클래스를 살펴볼 수 있습니다.
그러나 내가 끝내야 할 코드는 여기서 예상 한 것보다 훨씬 길다는 것을 알려드립니다. 사실, 당신은 몇 가지 작업을해야 할 것이다 :
Class#getDeclaredMethod(...)
로 사용)의 이름과 매개 변수 목록에서이러한 각 단계는 일련의 예외가있는 다소 모호한 코드 줄을 보입니다.
대체 방법이 있다면 사용하십시오! 이 클래스 필드가 있다면
jPanel에 사용자 지정 구성 요소가 있고이를 다시 그리지 않고 작업하고 싶습니다. 나는 목록이나 맵을 사용할 수 있다고 생각하지만지도의 값을 변경 한 다음 맵에서 정보가 포함 된 GUI를 다시 그려야합니다.
나 한테는이 대답이 보이지 않아. – TechNyquist
반사가 원하는 것입니다. 그러나 간단한 'HashMap'이 실제로 필요한 것을 할 수있는 가능성도 있습니다. – biziclop
이것은 불가능합니다. –