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方法,您的实现人员可以使用该方法将项添加到列表中(这样您就永远不会在类之外修改它)