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

Ric*_*ral 3 java get interface set super

我有以下get方法:

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

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

    return newList;
}
Run Code Online (Sandbox Code Playgroud)

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

然后我有这个set方法:

public void setMessagesList(ArrayList<PersonalMessage> listMessages) {
    this.listMessages = listMessages;
}
Run Code Online (Sandbox Code Playgroud)

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

我已决定使用,ArrayList因为这样我可以强制执行我想要的,否则可能会出现乱七八糟的不同类型的列表.

但我不确定这是否可行......

Bre*_*ail 7

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

public void setMessagesList(Collection<PersonalMessage> messages) {
    this.listMessages = new ArrayList<PersonalMessage>(messages);
}
Run Code Online (Sandbox Code Playgroud)