【问题标题】:Readable key value pair data-structure in javajava中可读的键值对数据结构
【发布时间】:2017-12-05 12:51:38
【问题描述】:

我有一个键值数组

String[] fields      = {"firstName", "middleName", "id"};
String[] fieldValues = {"first name", "middle name", "student id"};

我有一个比较两个 bean 并返回具有不同字段值的字符串数组的方法。

 public static String[] beanCompare(Object A, Object B, 
                                          String[] fields, String[] fieldValue);

例如,如果我传递一个具有不同名字和 id 的 Studentbean。 它会返回

["first name", "student id"].

我需要比较 100 颗豆子。
返回值更新活动日志表。比方说,firstName 字段已更新。我们表示

first name 已更新

在用户界面中。是为了审计。 是否有一种可读且可维护的方式来表示这种键值对?

【问题讨论】:

  • 考虑过 java 8 lambda 流?您将始终需要两个列表之间的“映射器”
  • Aheum...你在哪里使用 fieldValues?
  • fieldValues 未在您的方法中使用。它有什么用?
  • 我很抱歉。我试图编写我的大方法的简化版本。该字段是我们解析 bean 后得到的值。该值是我们要显示的名称。例如:firstName:后端值和学生名字:UI 值

标签: java design-patterns methods field


【解决方案1】:

如果我错了,请纠正我,但似乎(以这种方式传递字段名称和字段值)您正在尝试动态构建自定义对象。

如果那是你的目的,那么你就是完整的XY problem,因为你已经找到了解决问题的方法,然后你正在尝试调整这个解决方案,而你应该回到问题上来,拥有一个标准的、经过精心设计的最佳实践解决方案:Builder Pattern

如果您在一个对象上有很多字段,但在某些情况下只需要使用其中的一部分而在其他情况下需要使用另一部分,则使用 Builder,只设置您需要的字段,然后调用build() 方法,并获取您的对象,而无需执行您正在执行的操作或置换所有构造函数。

Here is an example Java 中的这种模式。

【讨论】:

  • 是的,我正在尝试动态构建自定义对象。我有一个非常多样化的领域。我无法为所有不同的方法创建构建器。所以,我想到了使用一个字符串数组来动态构建我的对象。感谢您提供 XY 问题链接。我创建了一个构建器类来获取字段字符串列表,但是我可以使用构建器模式来适应动态行为吗?
  • 这正是 Builder 模式的用途。如果您有 100 个字段,则只需在构建器上创建 100 个 setter 方法,而不是所有不同构造函数所需的排列(数学上将是 100*99/2 = 4950 个构造函数以涵盖所有情况)。还可以尝试通过将数据拆分为更多原子 bean 来避免如此大的 bean,但如果你不能,Builder 模式是你最好的朋友
  • 嗨。对于无法按照我的意图清楚地解释我的情况,我深表歉意。我已经在使用构建器模式了。我有 100 颗豆子。我需要比较同一个bean的两个对象。所以我有字段和值数组。我一直在寻找一种更有效地表示它的方法。我相信我掉进了XY坑。 ?
  • 我猜是这样 :) 随意编辑您的问题,添加您真正的潜在问题,并提供一个有意义的示例(甚至是 foo-bar 示例,但足够清晰让我们准确地了解您想要实现的目标)
  • 我已编辑。我希望这次我避免了 XY 问题。如果我的例子不够清楚,请告诉我。
【解决方案2】:

所以,枚举对我有用。

    public enum FieldEnum {

    firstName("first name"), middleName("middle name"), id("student id");

    String value;

    FieldEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
    }

它更具可读性和可维护性。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 1970-01-01
    • 2010-09-05
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多