设计: ListView 接口,and the missing read-only interfaces in java collection framework
2023-09-27 14:23:51 时间
Java的集合框架以其成功易用的设计征服了很多人(包括我),并且教科书式的诠释了泛型的应用方式。
我也是被 Joshua Bloch 的书引领入门,从中得益良多。我当然不会认为自己在设计上比他懂得更多,我也不知道当初Collection框架设计时为什么没有提供一个“只读”层面的接口,或许站在他的高度,有许多我所不知道的考量吧。
不过我在实际工作中不止一次遇到了这种需要“只读的列表”接口的情况,我不要 UnsupportedOperationException,我要更纯粹的——干脆没有提供任何modify方法的接口,于是有了下面这个 ListView,拿来与同样需要的人分享:
/* * Copyright 2013 (raistlic@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * This interface does not extends {@link java.util.Collection}, because java's * collection interface is essentially a "mutable collection" interface, while * this interface tries to define a read-only list view. * * <p/> * Design ideas from {@link java.util.List}. * * @author raistlic */ public interface ListView<E> extends Iterable<E> { public int size(); public E get(int index); public int indexOf(E element); public boolean isEmpty(); public boolean contains(E element); }
在实际应用中,我遇到的情况是需要(跨线程)安全的发布一个ListView,然后任何线程可以安全对这个list view进行size查询、迭代访问等操作,而不必担心它会改变,这个 ListView 实现本身是 immutable 的,并且它背后的提供者用一种 “copy on write” 的方式来维护其内部的 reference。
相关文章
- Java最强编译器Intelli IDEA配置大全
- java基础---->java8中的函数式接口
- java基础---->final关键字的使用
- java中并不是任意多个接口都可以实现多实现
- Java 中使用 public,private 和 protected 修饰的方法
- Java 主要特性
- 模拟Java-Sping,实现其IOC和AOP核心
- java中的锁之Lock接口与Condition接口
- Java的GUI框架如何选择? Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot、BeautyEye框架(美观)?
- Java配置文件数据库密码加密
- java 基础 接口
- Java Regular (二) 去 掉 排 除 词
- java基础(四)-----抽象类与接口
- Java 调用第三方接口,实战来了!
- java Future 接口介绍
- 我是如何理解Java抽象类和接口的
- JAVA高级语法1:基础
- registry key 'Java Runtime Environment' has value'1.8',but '1.7' is requaired(转)
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
- 传智播客Java 一维数组
- 8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
- java枚举类的常见用法
- 已解决java.lang.NoClassDefFoundError异常的正确解决方法,亲测有效!!!已解决java.lang.NoClassDefFoundError异常的正确解决方法,亲测有效!!!
- 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系
- java 接口测试
- JAVA多线程提高接口响应速度实例
- java 分隔函数split("",-1)的用途