[英]get field value by its name in java
我需要讀取給定字段名稱的字段值。 說我有一個稱為product的類,它具有字段:size,image,link ..,並具有getSize(),getImage()和getLink()等方法來讀取這些值。 現在如果我給'size',我想通過調用getSize()來獲得尺寸,給定'image',通過調用getImage()獲得圖像...
現在我有一個笨拙的代碼調用getField(String fieldName)來處理此問題:
public void String getField(String fieldName, Product p) {
String value = "";
swtich(fieldName):
case 'size':
value = p.getSize();
break;
case 'image':
value = p.getImage();
break;
....
問題是我在此類中有太多字段,整個代碼看起來很難看。 我也嘗試避免由於可讀性差的反射頁面。 還有其他想法可以很好地處理嗎? 謝謝
除了反射或顯式切換(如您所願)外,唯一真正的選擇是根本沒有這些字段。 可以使用通用的getAttribute(Attribute a)
代替getSize()
, getImage()
等。 Attribute
可能會有一個enum
。 就像是:
enum Attribute { SIZE, IMAGE, ... }
public class Product {
Map<Attribute, String> attributes = new EnumMap<>(Attribute.class);
public String getAttribute(Attribute attribute) {
return attributes.get(attribute);
}
public void setAttribute(Attribute attribute, String value) {
attributes.put(attribute, value);
}
...
}
EnumMap
的效率很高,因此此代碼將很快-速度不如真實字段快,但在您的應用程序中可能不會明顯變慢。
將Attribute
設為enum
的原因(而不是僅具有String
屬性鍵)是因為它為您提供與顯式getter函數相同的類型安全性。 例如, p.getAttribute(Attribute.NOT_A_REAL_ATTRIBUTE)
將產生一個編譯時錯誤,與p.getNotARealAttribute()
相同(假定未定義枚舉值和方法)。
您可以考慮將屬性名稱直接用作映射的鍵,將值用作屬性。
HashMap<String, Object> attributes
因此,如果添加了新屬性,則無需修改結構或枚舉。
注意,“大小”和“大小”的行為將有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.