java - 如何处理 ArrayList 的默认值

标签 java

我正在创建一个应用程序,其中包含我正在编写的名为 Person 的类。 Person 的字段之一是“别名”,它是 ArrayList<String> .最终,别名将根据以下逻辑显示给用户:如果 Person 有别名,那么它们应该显示为 [Finch, Wren, Admin, etc...]。 , 否则 UNKNOWN应该显示。到目前为止,我已尝试通过以下三种方式之一实现此目的:

  1. 人包含方法getAliases()它只是按原样返回 ArrayList 的副本。调用者检查空数组以实现所需的行为。

  2. 人包含方法aliasesToString()可以调用它来生成所需的字符串。

  3. 而不是使用 ArrayList<String> , aliases 是 DefaultableArrayList<T> 的一个实现.此类扩展 ArrayList 并保存类型为 T 的默认值。 toString()方法被重写以生成所需的字符串。应用程序调用 some_person.getAliases().toString()以产生所需的行为。

下面是我对选项 3 的实现:

public class DefaultableArrayList<T> extends ArrayList<T> {

    private static final long serialVersionUID = -6735356930885363889L; // Auto-generated
    private final T defaultElement;


    public DefaultableArrayList(T defaultElement) {
        super();
        this.defaultElement = defaultElement;
    }


    public DefaultableArrayList(Collection<? extends T> c, T defaultElement) {
        super(c);
        this.defaultElement = defaultElement;
    }


    public DefaultableArrayList(int initialCapacity, T defaultElement) {
        super(initialCapacity);
        this.defaultElement = defaultElement;
    }


    public T getDefaultElement() {
        return defaultElement;
    }


    @Override
    public String toString() {
        if (!isEmpty()) {
            return super.toString();

        } else {
            return defaultElement.toString();
        }
    }
}

关于选项 2 和 3,我担心的是我可能会在违反 OOP 指南的同时添加不必要的复杂性。 Person 真的应该关心如果没有别名会发生什么吗?别名定义它最终如何在应用程序中实现是否有意义?我认为我应该让来电者处理空箱。我应该选择哪个选项最符合标准 OOP 设计指南?还是有第四种我没有考虑过的选择?

最佳答案

第一个选项是正确的。模型不应该关心它的显示方式。

在富应用程序、Web 应用程序或控制台应用程序中,您不会以相同的方式表示此人和他/她的别名。

即使在给定的应用程序中,您也可能会以不同的方式表示同一模型。

如果您将应用程序国际化,则必须将“UNKNOWN”更改为其他内容。

因此,只需按原样返回列表(或列表的不可修改 View ),并让表示层处理表示逻辑。顺便说一句,toString() 与其说是一种用于表示应用程序中对象的功能方法,不如说是一种调试帮助。

关于java - 如何处理 ArrayList 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30951326/

相关文章:

java - 从带有 JAVA 查询参数的链接下载图像

java - openjdk中的原生linux方法在哪里?

java - 打印出 Java 方法的值

java - 给定最终 block 未正确填充 AES256

java - java程序中闪烁的gif

java - 如何捕获类内部的 MethodNotFoundException 异常?

java - 在 servlet 的 processRequest 方法中发送 POST 请求

java - jar 文件在 lib 目录中的位置

java - 为什么在类路径规范中找不到 jar 文件? (来自 Oracle 的 FileChooserDemo)

java - HTTP 状态 404 – 源服务器未找到目标资源的当前表示或不愿意透露该资源的存在