728x90
Java의 final List 객체의 의미는??
final 은 본래 객체의 접근을 변경을 방지하는 한정자로 사용된다. 하지만, List 객체에 있어서는 최초 객체를 생성한 후에 필요에 따라 add, remove 등의 객체 element 변경이 가능하다..
|
그럼, List 객체에 있어서 final이 갖는 의미는 무엇인가??
한번 객체화 시킨 변수에 대해서 다른 참조자를 갖도록 할 수 없다. 즉, reference type의 객체로 한번 지정한 참조에 대한 변경을 허용하지 않는 것이다!
그럼 내부의 element에 대한 변경을 하지 않는 객체를 얻기 위해서는 어떻게 할 수 있을까?
아래 예제의 Nameserver2 를 보면, 기존의 Nameserver 객체를 Collection.unmodifiableList를 통해서 반환되는 객체를 갖게 된다. 때문에, 이후 해당 객체에 대해서는 add, remove가 불가능하므로 다음 라인의 add 함수를 실행시에 UnsupportedOperationException이 발생하게 된다.
|
public class ListFinalTest {
private static final List<NameserverProxy> Nameservers = new ArrayList();
private static List<NameserverProxy> Nameservers2;// = new ArrayList();
public static void main(String[] args) {
Nameservers.add(NameserverProxy.getNameserverProxy("localhost", 5000));
Nameservers.add(NameserverProxy.getNameserverProxy("localhost", 5001));
Nameservers.remove(0);
// Error due to final
// Nameservers = new ArrayList<NameserverProxy>();
Nameservers2 = Collections.unmodifiableList(Nameservers);
Nameservers2.add(NameserverProxy.getNameserverProxy("localhost", 5001)); // error!! UnsupportedOperationException
}
}
728x90
728x90