Java 关于get和set以及何时使用超类的问题

Java 关于get和set以及何时使用超类的问题,java,interface,get,set,super,Java,Interface,Get,Set,Super,我有以下get方法: public List<PersonalMessage> getMessagesList() { List<PersonalMessage> newList = new ArrayList<PersonalMessage>(); for(PersonalMessage pMessage : this.listMessages) { newList.add(pMessage.clone()); }

我有以下get方法:

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

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

    return newList;
}
public void setMessagesList(ArrayList<PersonalMessage> listMessages) {
    this.listMessages = listMessages;
}
我的问题是,我应该在方法签名中使用
List
而不是'ArrayList'吗

我决定使用
ArrayList
,因为这样我可以强制实现我想要的实现,否则这里那里可能会有不同类型的列表


但我不确定这是否是一种方式…

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

如果你使用列表,你也同意你自己。getter和setter具有相同的类型


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

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

setter方法正在打破底层表示的抽象。你的公共界面真的需要它吗

public void setMessagesList(Collection<PersonalMessage> messages) {
    this.listMessages = new ArrayList<PersonalMessage>(messages);
}
public void setmessages列表(收集消息){
this.listMessages=新的ArrayList(消息);
}

是的,这也是我的建议。(+1)Spring会对不同的getter/setter类型感到不安。