gpt4 book ai didi

java - java中通过名称获取字段值

转载 作者:行者123 更新时间:2023-12-01 12:48:38 25 4
gpt4 key购买 nike

我需要读取给定字段名称的字段值。假设我有一个名为product的类,它有字段:大小、图像、链接..并且有 getSize()、getImage() 和 getLink() 等方法来读取这些值。现在,如果我给出“大小”,我想通过调用 getSize() 来获取大小,给定“图像”,通过调用 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() 相同(假设枚举值和方法是“当然,t 已定义)。

关于java - java中通过名称获取字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com