反射による静的定数フィールドの値の取得

1266 ワード

テストコード
  • テストGlobalクラスのYES定数
  • を取得
    public class Global {
    	
    	public static final String YES = "1";
    	private static final String NO="0";
    	
    	public static Object getConst(String field){
    		try {
    			return Global.class.getField(field).get(null);
    		} catch (Exception e) {}
    		return null;
    	}
    
    	public static Object getPrivateConst(String field){
    		try {
    			Field f = Global.class.getDeclaredField(field);
    			f.setAccessible(true);
    			return f.get(null);
    		} catch (Exception e) {}
    		return null;
    	}
    } 
    
  • Junitテスト
  • import static org.junit.Assert.*;
    import org.junit.Test;
    
    public class GlobalTest {
    	@Test
    	public void test() {
    		System.out.println(Global.getConst("YES"));
    		System.out.println(Global.getPrivateConst("NO"));
    	}
    }
    

    YESとNOの値の出力に成功しました.
  • staticプロパティを取得しない場合、getメソッドのパラメータはnullではなく、例外が放出されます.staticの場合、getメソッドはパラメータを無視するためnullを含む任意のオブジェクトを入力できます.
  • フィールドはpublicでなければなりません.privateフィールドを取得するには、setAccessible(true)にアクセス可能な設定が必要です.
  • Global.class.getField(field)は、Globalのclassオブジェクトが示すクラスで指定されたfieldという名前の共通メンバーのフィールドを表すFieldオブジェクトを返します.
  • Object get(Object obj)パラメータは、フィールドが存在するクラスのインスタンスに入力する必要があります.戻る前に、元の値パッケージがObjectオブジェクトになります.