关于获取和设置以及何时使用超类的问题

发布于 2024-09-03 07:06:21 字数 746 浏览 5 评论 0原文

我有以下 get 方法:

public List<PersonalMessage> getMessagesList() {
    List<PersonalMessage> newList = new ArrayList<PersonalMessage>();

    for(PersonalMessage pMessage : this.listMessages) {
        newList.add(pMessage.clone());
    }

    return newList;
}

您可以看到,如果我需要将实现从 ArrayList 更改为其他内容,我可以轻松做到,只需更改 newList 的初始化 以及依赖于 getMessageList() 返回内容的所有其他代码仍然有效。

然后我有这个 set 方法:

public void setMessagesList(ArrayList<PersonalMessage> listMessages) {
    this.listMessages = listMessages;
}

我的问题是,我应该在方法签名中使用 List 而不是 `ArrayList 吗?

我决定使用 ArrayList ,因为这样我可以强制实现我想要的,否则可能会出现到处不同类型的列表的混乱。

但我不确定这是否是要走的路......

I have the following get method:

public List<PersonalMessage> getMessagesList() {
    List<PersonalMessage> newList = new ArrayList<PersonalMessage>();

    for(PersonalMessage pMessage : this.listMessages) {
        newList.add(pMessage.clone());
    }

    return newList;
}

And you can see that if I need to change the implementation from ArrayList to something else, I can easily do it and I just have to change the initialization of newList and all other code that depends on what getMessageList() returns will still work.

Then I have this set method:

public void setMessagesList(ArrayList<PersonalMessage> listMessages) {
    this.listMessages = listMessages;
}

My question is, should I use List instead of `ArrayList in the method signature?

I have decided to use ArrayList because this way I can force the implementation I want, otherwise there could be a mess with different types of lists here and there.

But I'm not sure if this is the way to go...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半枫 2024-09-10 07:06:21

setter 方法打破了底层表示的抽象。您的公共界面真的需要它吗?

public void setMessagesList(Collection<PersonalMessage> messages) {
    this.listMessages = new ArrayList<PersonalMessage>(messages);
}

The setter method is breaking the abstraction of the underlying representation. Is it really needed on your public interface?

public void setMessagesList(Collection<PersonalMessage> messages) {
    this.listMessages = new ArrayList<PersonalMessage>(messages);
}
小嗲 2024-09-10 07:06:21

一般来说,我会选择界面(列表)。这意味着如果您认为 ArrayList 在这种情况下不适合使用,则不会破坏客户端代码。

如果您使用 List,您也同意自己的观点。 getter 和 setter 具有相同的类型。

另一个潜在的问题是,如果某些反射实用程序没有相同的类型,它们可能无法识别您的 getter/setter 对。

In general, I'd go for the interface (List). It means you don't break client code if you ever decide that ArrayList wasn't the correct thing to use in this situation.

You're also agreeing with yourself if you use List. The getter and the setter have the same type.

Another potential problem is that some reflection utilities may not recognize your getter/setter pair if they don't have the same type.

没有你我更好 2024-09-10 07:06:21

您是否依赖于 PersonalMessages 的顺序,或者 Collection 也足够了?为什么要强制执行特定的实施?对于上面的代码,Paramater 类型的 Collection 甚至 Iterable 就足够了。

Do you depend on the order of the PersonalMessages, or would a Collection also be sufficient? Why would you want to force a specific implementation? For the code above a Paramater type of Collection, or even Iterable would be good enough.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文