2016-02-27 57 views
-2

當我使用此代碼創建某種通用換類:替代反射訪問任意字段

//constructor method 
    public Change(Object affdObj, String affdField, float modifier) { 
     obj = affdObj; 
     //... 
     affectedField = affdObj.getClass().getField(affdField); 
     //... 
     affectedField.setFloat(obj, affectedField.getFloat(obj) + modifier); 
    } 

但後來我被告知,以避免反射,因爲它是非常緩慢只要有可能。我被建議關注接口。不幸的是,我看不到如何適合我的代碼接口。

因此,我的問題:如果需要訪問一個字段,他的名字他不知道提前除了使用反射之外還有其他選擇嗎?

PS

感謝您的答覆,夥計們。

而且因爲我的問題是擱置的主要意見爲基礎,我認爲這是在回答我的問題,即有沒有其他的方式來實現我的目標是不是在每個方面我的好。換句話說,我認爲我的方法是可以的。謝謝。

+0

反思是不是慢,我建議你首先的工作。如果緩存「Field」對象,則需要幾分之一秒的時間。 –

回答

0

首先,反映不慢(再)及被廣泛使用(Spring使用它,Hibernate使用它,等等)。所以,如果你唯一的擔憂是速度,你可以放心地使用它。 關於其他方式做你想做的事情,因爲你提供的字段名稱作爲一個字符串,並確定它是這樣的,你不能使用接口。