簡體   English   中英

java java.lang.reflect.Field的用例?

[英]Usecases for java java.lang.reflect.Field?

前幾天我在spring-security(3.0.x分支)中查看了acl模塊的源代碼。我發現ACLImpl對象有一組私有的ACE(在db中用1-many反射表示)。 深入研究代碼,我發現沒有明顯的地方可以填充私人的ace。 我花了一段時間才發現人口是用java.lang.reflect.Field完成的:

private final Field fieldAces = FieldUtils.getField(AclImpl.class, "aces");
...
fieldAces.setAccessible(true);
...
try {
    fieldAces.set(acl, aces);
} catch (IllegalAccessException e) {
    throw new IllegalStateException("Could not set AclImpl entries", e);
}

(從BasicLookupStrategy.java復制的所有代碼)我認為Field主要用於在晦澀的罐子里披露私人領域。 除了混淆代碼流之外還有其他原因嗎?

除了訪問私有或其他不可訪問的字段之外,java.lang.reflect.Field通常用於與整個反射機制相同的目的:允許動態發現和操作在編譯時不一定已知的類型。 與許多其他語言一樣,Java是靜態類型的。 反射機制允許人們在某種程度上繞過它,並引入一些更動態的特征,比如,按名稱檢索字段值。 這是非常寶貴的,因為我們認為理所當然的一些工具執行的大部分“魔法”依賴於它 - 想想JUnit,模擬框架,Hibernate,JAXP,gson ......混淆代碼流程只是過多的精彩內容之一你可以使用java.lang.reflect.Field的東西:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM