gpt4 book ai didi

java - 如何处理 ArrayList 的默认值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:50 24 4
gpt4 key购买 nike

我正在创建一个应用程序,其中包含我正在编写的名为 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/

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