0

在我最近的一次代码审查中,有人告诉我 set/get 是可选的,可能会抛出 UnsupportedException。

这是我的代码:

 List<myObj> myList = new ArrayList<>();

ArrayList 不将 get/set 标识为可选。此外,据我了解,如果我使用了 Array.asList() ,那么我可能会遇到这些错误,因为 Array.asList() 在列表界面中包装了一个数组(固定大小)。

所以,我的问题是请确认我是否正确,如果需要我会更新我的工作。

4

2 回答 2

5

java.util.List接口 ( javadoc )将一些方法定义为可选的;这包括set(int, E) get()包括。实现了这ArrayList两种方法;它们可以安全使用。如果代码审查者的意图是让您将这些调用包装在 try/catch 块中,我强烈反对。

于 2013-08-26T20:42:53.327 回答
3

假设UnsupportedException你的意思是UnsupportedOperationException,Java 中的大多数List实现都扩展了java.util.AbstractList。这个类有一些自己的抽象方法。方法的实现就像set这样get

public E set(int index, E element) {
    throw new UnsupportedOperationException();
}

从这个意义上说,您不必实现它们,它们是可选的。如果您尝试使用它们,您将获得异常。

java.util.ArrayList覆盖这些方法,所以不用担心会抛出这样的异常。

Array.asList()返回一个类型的实例,java.util.Arrays$ArrayList它也是extends AbstractList,但覆盖了一些方法,包括setgetUnsupportedOperationException如果您使用List界面,它们不会抛出。

于 2013-08-26T20:43:58.030 回答