2014-11-06 2 views
-1

을 찾을 나는 ONE_KEY과 값으로 시작하는 모든 필드를 좀하고 싶습니다 자바 Refelection는 : 필드의 이름과 값

public class SampleReflection { 
     public static final String TWO_name = "html"; 
     public static final String TWO_find = "css"; 


     public static final String ONE_KEY_java = "java"; 
     public static final String ONE_KEY_jsp = "jsp"; 
     public static final String ONE_KEY_oracle = "oracle"; 
     public static final String ONE_KEY_spring = "spring"; 
     public static final String ONE_KEY_struts = "struts"; 

} 

아래 같은 클래스

있습니다.

ONE_KEY_xxx은 임의의 숫자 일 수 있기 때문입니다.

Java 리플렉션 또는 java의 다른 방법으로이 작업을 수행하는 방법은 무엇입니까?

감사

답변

1

당신은 SampleReflection.class.getDeclaredFields()를 사용하는 이름으로 결과 및 필터를 반복 할 수 있습니다. 그런 다음 field.get(null)으로 전화하여 정적 필드의 값을 가져옵니다. 비공개 필드에도 액세스하려면 first.setAccessible(true)으로 전화해야합니다 (보안 관리자가 허용하는 경우).

다른 방법으로 Apache Common의 반사 유틸리티를 살펴볼 수도 있습니다. FieldUtils 등을들 수있다.

실제 달성하려는 목표에 따라 더 나은 접근 방법이있을 수 있습니다 (예 : 지도, enums 등을 사용하십시오.

열거 형을 사용하는 정적 필드가있는 경우에는 더 좋은 방법이 될 수 있습니다. 예 :

enum SampleFields { 
    TWO_name("html"), 
    TWO_find("css"), 
    ONE_KEY_java("java"), 
    ONE_KEY_jsp("jsp"); 
    ONE_KEY_oracle("oracle"), 
    ...; 

    private String value; 

    private SampleFields(String v) { 
    value = v; 
    } 
} 

그때 이름 SampleFields.values() 필터 반복.

또는 사용자의 요구에 맞는 경우 이름을 분리하고지도를 enum 값 (예 :

enum SampleFields { 
    TWO(/*build a map "name"->"html","find"->"css")*/), 
    ONE_KEY(/*build a map "java"->"java","jsp"->"jsp", ...*/); 

    private Map<String, String> values; 

    private SampleFields(Map<String, String> map) { 
    values = map; 
    } 
} 

다음과 같이 열거 값을 얻을 : SampleFields.valueOf("ONE_KEY").get("java")

0

감사 답변을,

이 내가 무엇을 찾고 있었다입니다

import java.lang.reflect.Field; 
import java.util.HashMap; 
import java.util.Map; 

public class SampleReflection { 
    public static final String TWO_name = "html"; 
    public static final String TWO_find = "css"; 

    public static final String ONE_KEY_java = "java"; 
    public static final String ONE_KEY_jsp = "jsp"; 
    public static final String ONE_KEY_oracle = "oracle"; 
    public static final String ONE_KEY_spring = "spring"; 
    public static final String ONE_KEY_struts = "struts"; 

    public static void main(String[] args) { 
     Class<?> thisClass = null; 
     Map<String,String> keyValueMap = new HashMap<String,String>(); 
     try { 
      thisClass = Class.forName(SampleReflection.class.getName()); 

      Field[] aClassFields = thisClass.getDeclaredFields(); 
      for(Field f : aClassFields){ 
       String fName = f.getName(); 
       if(fName.contains("ONE_KEY")){ 
        keyValueMap.put(fName, (String)f.get(SampleReflection.class)); 
       } 
      } 
      for (Map.Entry<String, String> entry : keyValueMap.entrySet()) 
      { 
       System.out.println(entry.getKey() + "=" + entry.getValue()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

}