2012-09-07 4 views
3

자바 리플렉션에 대한 질문이 있습니다.java reflection - 특정 속성의 이름을 얻는 방법

자바 클래스에서 특정 필드의 이름을 얻는 방법이 필요합니다. 다음과 같이 작동합니다 뭔가 :

class X{ 
    int x; 

    String getNameOfProperty(Object o){ 
     .... 
    } 
} 

그런 다음,

System.out.println(getNameOfProperty(x)); 

를 호출하는 내가 'x'를 좀하고 싶습니다;

나는

X.class.getDeclaredFields(); 

를 사용하여 클래스의 필드를 얻기 위해 관리해야하지만 난 재산과 그와 관련된 필드 개체 ​​사이의 링크가 없습니다.

+1

필드의 런타임 값을 가져와야합니까? – Redandwhite

+1

[PropertyUtils] (http://commons.apache.org/beanutils/)를 사용하셨습니까? –

+0

** 사용자 기능 **이란 무엇입니까? 구현해야합니까? 기술자가없는 잠재적 인 최종 사용자 인 것처럼 설명하십시오. 지식. 그렇게하면 더 나은 조언을 얻을 수 있습니다. –

답변

3

이 목적으로 추상 구문 트리를 사용할 수 있습니다. Eclipse의 경우 here 세부 정보를 찾을 수 있습니다. ANTLR

- - javaparser

+0

그래, 이건 분명히 할 수있는 방법이지만, 나는 AST의 초심자이고, 내가 필요한 것에 너무 복잡해 보인다. 내 말은, 이것에 투자 할 시간이별로 없다는 것입니다 ... 아주 좋은 대답입니다. +1 – sebi

1

당신이 여기 물어보고 싶은 것을 정말 불분명하다

또한

를 사용할 수 있습니다.

질문을 올바르게 이해했다면 Field Java 클래스를 사용하면 런타임에 해당 필드에 대한 객체 값을 얻을 수 있습니다. getDeclaredFieldsField[]을 보내주십시오.

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/Field.html

체크 get(Object o) 방법

지정된 객체의이 필드가 나타내는 필드의 값을 반환. 원시적 형을 가지는 경우, 값은 자동적으로 오브젝트에 랩됩니다.

0

여러분은 java.lang.reflect.Field 클래스에서 getName()을 사용할 수 있다고 생각합니다. 귀하의 질문에 귀하의 코드에 많은 필드가 있습니다.

이 코드를 core.Test1 클래스로 간주하십시오. fieldName을 호출하면 'i'와 'd'및 42와 6이 반환됩니다. 여기서는 getDouble을 사용하고 int는 Dboule에 맞지 않기 때문에 문제가 없습니다. 먼저 값을 얻으십시오.)

그게 너니?

private int i = 42; 
private double d = 6.0d; 

@Test 
public void test() { 
    try { 
     Class<?> clazz = Class.forName("core.Test1"); 

     Field[] fieldlist = clazz.getDeclaredFields(); 
     for (int i = 0; i < fieldlist.length; i++) { 
      System.out.println("field name = " + fieldlist[i].getName()); 
      System.out.println("value = " + fieldlist[i].getDouble(this)); 
      System.out.println("field type = " + fieldlist[i].getType()); 
      System.out.println("modifiers = " + Modifier.toString(fieldlist[i].getModifiers())); 
     } 
     } 
     catch (Throwable e) { 
     System.err.println(e); 
     } 
}   
+0

동의하지만 런타임에 fieldlist [i]가 내 속성 x의 추상화임을 어떻게 알 수 있습니까? 그것은 y와 같은 다른 자산의 추상화 일 수 있습니다. 이 링크가 필요해. – sebi