3 回答
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
是的,絕對(duì)是 - 假設(shè)您擁有適當(dāng)?shù)陌踩珯?quán)限。使用Field.setAccessible(true)第一,如果你從不同的類(lèi)訪問(wèn)它。
import java.lang.reflect.*;class Other{
private String str;
public void setStr(String value)
{
str = value;
}}class Test{
public static void main(String[] args)
// Just for the ease of a throwaway test. Don't
// do this normally!
throws Exception
{
Other t = new Other();
t.setStr("hi");
Field field = Other.class.getDeclaredField("str");
field.setAccessible(true);
Object value = field.get(t);
System.out.println(value);
}}不,你通常不應(yīng)該這樣做......它顛覆了班級(jí)原作者的意圖。例如,可以在通常可以設(shè)置字段的任何情況下應(yīng)用驗(yàn)證,或者可以同時(shí)更改其他字段。您實(shí)際上違反了預(yù)期的封裝級(jí)別。
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
是。
Field f = Test.class.getDeclaredField("str");
f.setAccessible(true);//Very important, this allows the setting to work.
String value = (String) f.get(object);然后使用field對(duì)象獲取類(lèi)實(shí)例的值。
請(qǐng)注意,get方法通常會(huì)讓人感到困惑。您有該字段,但您沒(méi)有該對(duì)象的實(shí)例。你必須將它傳遞給get方法
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
對(duì)的,這是可能的。
您需要使用getDeclaredField方法(而不是getField方法),以及您的私有字段的名稱(chēng):
Field privateField = Test.class.getDeclaredField("str");此外,如果要訪問(wèn)私有字段,則需要將此字段設(shè)置為可訪問(wèn):
privateField.setAccessible(true);
完成后,您可以在Field實(shí)例上使用get方法來(lái)訪問(wèn)str字段的值。
添加回答
舉報(bào)
