2010-03-30 5 views
3

BeanUtils와 유사한 리플렉션을 사용하여 객체의 get 접두어가 붙지 않는 속성을 얻을 수있는 유틸리티가 있습니까? 예 : "hashCode"를 지정하면 object.hashCode() 값을 가져 오려고합니다.Java Reflection Utility

감사합니다.

답변

3

Object마다 hashCode()으로 전화 할 수 있습니다. 당신은 이것을 반영 할 필요가 없습니다.

그렇지 않으면 java.lang.Class 및 그 방법은 getMethod(..)이며 java.lang.reflect.Method을 반환 할 수 있습니다.

+1

Sun 반영 자습서 : http://java.sun.com/docs/books/tutorial/reflect/ – BalusC

+0

@downvoter -이 대답이 유용하지 않은 이유를 설명해 주시겠습니까? – Bozho

1

자바 리플렉션 API를 사용하면 전용 변수를 포함하여 클래스의 지정된 인스턴스에있는 모든 속성에 액세스 할 수 있습니다.

리플렉션은 개인 생성자로 개체를 인스턴스화하는 등 많은 작업을 수행 할 수있는 강력한 도구입니다.

다음은 빠른 Google 검색 결과가 반영된 점잖은 튜토리얼입니다.

http://tutorials.jenkov.com/java-reflection/index.html

0

클래스 필드 정보 찾기 : 그것은 데이터 필드는 클래스에 정의 된 찾을 수 있습니다. 이렇게하려면 다음 코드를 사용할 수 있습니다

import java.lang.reflect.*; 

    public class field1 { 
     private double d; 
     public static final int i = 37; 
     String s = "testing"; 

     public static void main(String args[]) 
     { 
     try { 
      Class cls = Class.forName("field1"); 

      Field fieldlist[] 
       = cls.getDeclaredFields(); 
      for (int i 
       = 0; i < fieldlist.length; i++) { 
       Field fld = fieldlist[i]; 
       System.out.println("name 
        = " + fld.getName()); 
       System.out.println("decl class = " + 
          fld.getDeclaringClass()); 
       System.out.println("type 
        = " + fld.getType()); 
       int mod = fld.getModifiers(); 
       System.out.println("modifiers = " + 
          Modifier.toString(mod)); 
       System.out.println("-----"); 
      } 
      } 
      catch (Throwable e) { 
      System.err.println(e); 
      } 
     } 
    } 

소스 : http://java.sun.com/developer/technicalArticles/ALT/Reflection/

1

org.apache.commons.beanutils.MethodUtils 내가 무엇을 찾고 있었다이었다.

+0

여전히'hasCode()'를 호출하는 것은 모든 객체에서 가능합니다. 이 방법에만 해당되는 경우 직접 호출하십시오. – Bozho

+0

JSF ... 또는 size() 등에서 hashCode를 호출 할 수 없습니다. –

0

BeanUtils와 유사한 리플렉션을 사용하여 개체의 get 접두사가없는 속성을 가져 오는 유틸리티가 있습니까?

표준 리플렉션 API가 있지만 문제가되는 것은 무엇입니까? 콩 규칙은 get 또는 is (및 다른 특정 특성)으로 시작하는 메소드가 속성이라는 것입니다. 이 규칙이 없으면 클래스의 메소드 중 어느 것이 속성 getter (또는 setter)인지 완전히 다른 목적을 가진 메소드인지 알 수 없습니다. 예를 들어, boolean 속성에 대한 게터라고 오인 된 믿음으로 File.delete()에 전화하고 싶지 않을 것입니다!

관련 문제