Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可修改列表的接口_Java_List - Fatal编程技术网

Java 可修改列表的接口

Java 可修改列表的接口,java,list,Java,List,所以我有一个界面: public interface { List<String> getList(); } 公共接口 { List getList(); } 但是,我相信实现者可以返回一个不可修改的列表,如: List<String> getList() { return Collections.unmodifiablelist(new ArrayList<String>()); } List getList() { 返回集合。不可修改

所以我有一个界面:

public interface
{
    List<String> getList();
}
公共接口
{
List getList();
}
但是,我相信实现者可以返回一个不可修改的列表,如:

List<String> getList()
{
    return Collections.unmodifiablelist(new ArrayList<String>());
}
List getList()
{
返回集合。不可修改列表(新的ArrayList());
}

是否有任何接口或方法确保始终返回可修改列表。我不想复印。

您不能保证,因为退货类型是
收款
。您可以做的是正确的单据

在API设计方面,您应该让javadoc变得清晰!使用一种方法而不阅读其文档的人应该感到惊讶


我认为您需要的不是接口,而是一个特殊的实现,因为接口定义的是“事物如何”而不是“事物如何”。在其他情况下,您试图建立一个特定的行为,因此,这里最好的方法是强制实现者使用特定版本的
列表
,如下所示:

public interface MyInterface {
    MyModifiableList getList();    

}
然后,创建可修改类的版本,供实现者使用。例如:

public final class MyModifiableList {
     // Implementation...
}

尝试修改它,如果它抛出UnsupportedOperationException,则创建一个副本?或者您可以只要求
getList()
返回
ArrayList
。不,您永远不能阻止实现接口的类抛出
RuntimeException
,该列表将记录现有接口,并说明需要可修改的列表。否则会出现异常。将其称为
getModifiableList
,并责怪错误实现接口的人。作为补充说明,您应该认真考虑这一点。如果实现者返回一个不可修改的列表,可能有原因吗?也许它们的内部实现依赖于该列表……而您在外部修改它会导致问题吗?也许更好的方法是在接口中公开add方法,您的实现人员可以使用该方法将项添加到列表中(这样您就永远不会在类之外修改它)