Java中的可选操作

在《Java编程思想》第17章容器深入研究中,描述了Collection的可选操作,即执行各种不同添加和移除的方法在Collection接口中都是可选操作。(可参考P472)

 

可选操作的具体实现与表现:一般是在Abstract类中实现特定方法,但是该方法体内只有一条抛出UnsupportOperationException异常语句;从而继承该抽象类却没override该方法的类,在进行向上转型使用root interface来调用该方法时,在运行时抛出异常。

 

定义可选操作的原因:“这样做可以防止在设计中出现接口爆炸的情况”。通过抽象类来推迟某些方法的实现,直到需要实现的时候。

 

深入去理解书上提出的Arrays.asList()方法,查看源码可知:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

而此处的返回的ArrayList是Arrays的内部类(通过继承AbstractList实现),但是却没有重写add方法,因此使用该方法将会抛出UnsupportOperationException异常。

List<Integer> a = Arrays.asList(1,2,3);
a.add(4);//Illegal
boolean b = a.contains(1);

 

总结:

1. 在运行时,若抛出UnsupportOperationException异常,应该从底层Abstract实现查找原因,并进行相应的重写来避免该异常;

2. 在设计模式的角度,应该面向接口编程,同时对于较多的导出Abstract类进行相应的方法可选操作;

posted @ 2019-06-14 16:38  JayInnn  阅读(685)  评论(0编辑  收藏  举报