假設我在my.package
包中包含一個類Foo
,其中包含一些靜態字段。使用反射實現此類的正確方法
我想使用反射來獲取這些靜態字段的值。
我知道我可以寫my.package.Foo.class.getDeclaredField(...
,但這是不令人滿意的,因爲我對類名和包名進行了硬編碼。
我想使用this.class.getDeclaredField(...
,但即使從非靜態成員函數內調用,這在Java中也是無效的。
有沒有辦法?
假設我在my.package
包中包含一個類Foo
,其中包含一些靜態字段。使用反射實現此類的正確方法
我想使用反射來獲取這些靜態字段的值。
我知道我可以寫my.package.Foo.class.getDeclaredField(...
,但這是不令人滿意的,因爲我對類名和包名進行了硬編碼。
我想使用this.class.getDeclaredField(...
,但即使從非靜態成員函數內調用,這在Java中也是無效的。
有沒有辦法?
每個類都繼承實例方法Object#getClass()
。調用以獲取您的實例對應的Class
對象。
我不知道爲什麼這裏面Foo
作爲Foo
已經知道其static
領域,你會直接在編譯時對它們的訪問,你會怎麼做。
非靜態地,您可以使用this.getClass()
來獲取當前班級,如@sotirios-delimanolis所述。
靜態,你可以做到這一點,雖然這是一個有點難看:
public static Class<?> getCurrentClassStatic() {
try {
return Class.forName(new Throwable().getStackTrace()[0].getClassName());
} catch (ClassNotFoundException e) {
return null; //Shouldn't happen...
}
}
非靜態,你可以使用'this.getClass()'。 – Pokechu22 2014-10-16 15:29:41