匿名内部类的神奇用法——实现视图机制
来源:互联网 发布:淘宝玛卡是真的吗 编辑:程序博客网 时间:2024/06/07 00:30
最近一段时间一直在学习java核心技术第八版的基础卷。今天看到了匿名内部类一个很高级的用法。本着增进交流,共同提高的目的,特在此分享一下。如果有同学对匿名内部类不熟悉,推荐阅读java核心技术第八版基础卷的229页和228页。如果想更多地了解java中的视图机制,请参看java核心技术第八版基础卷的592页的视图与包装器部分。
首先,我们定义如下一个类:
class A{
private ArrayList<Card> list ;
public ArrayList<Card> get(){
return list ;
}
在类A中有一个数组列表,同时定义了一个列表的访问器方法,此时,类B的对象可以通过该方法获取数组列表的引用,然后就能对列表执行各种操作了。也就是说,类B的对象对数组列表有完全的操作权限。假设我们不想让类B的对象拥有如此大的权限,比如说,只想让类B的对象获取数组列表中的内容,不允许它对数组列表进行修改,应该怎么办呢?一种办法是在类A中增加如下一个方法并删除访问器方法:
public Card get(int index) {
return list.get(index) ;
}
此时,类B的对象通过调用该方法就可以满足要求。现在,我们希望类B的对象不仅可以访问数组列表中的元素,还可以修改其中的元素,而不能往其中插入元素,这时该怎么办呢?可以在类A中再增加如下方法:
public void set(int index,Card aCard) {
list.set(index,aCard) ;
}
进一步,假设我们还想类B的对象可以往数组列表中插入元素呢?OK,在类A中继续加方法就是。But,大家想过没有,这样下去,类A中的很多方法都只是为了实现其他类的对象有限地操作数组列表。还有没有什么好的办法呢?答案就是使用匿名内部类实现视图机制。我们在类A中增加如下方法:
public List<Card> get(){
return new AbstractList<Card> () {
public Card get(int index) {
return A.this.list.get(index) ;
} } }
这个方法返回一个列表的引用,但是这个列表的引用并不是一个真正意义上的列表,它可以看做是类A中数组列表的“视图”。类B的对象可以调用该方法获取这个“视图”。通过该“视图”,类B的对象可以获取类A中数组列表的元素,但不能执行其它操作。如果想要增加其它操作,只需要在匿名内部类中增加相应的方法就可以了。这样一来,是不是感觉结构清晰多了呢?
俺是一个新手,写这篇博客,完全是根据自己的理解。请各位大牛多多指教啊。
- 匿名内部类的神奇用法——实现视图机制
- 匿名内部类的实现
- 内部类——匿名内部类
- 内部类相关——定义、匿名内部类、回调实现及静态内部类
- 内部类和匿名内部类的用法
- java的匿名内部类用法
- java的匿名内部类用法
- 黑马程序员——Java(内部类、匿名内部类异常机制)
- 匿名内部类的实现形式
- 匿名内部类的两种实现
- 匿名内部类用法总结
- 内部类实现方式的比较(匿名内部类,局部内部类)
- 黑马程序员——内部类、匿名内部类
- java——内部类、匿名类、静态内部类
- JAVA基础——内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——java 内部类、匿名内部类
- Java内部类(一)——匿名内部类
- 配置ehcache.xml文件
- HDU 4295 状态压缩dp + KMP
- 配置ehcache.xml -----02
- 分段函数
- 一个问题求解
- 匿名内部类的神奇用法——实现视图机制
- How do programs execute?
- 媒体播放器三大底层架构
- LoadRunner Java Vuser 脚本开发实例
- QuickTime 2002 错误小结
- 给走游戏程序员之路的初学者这参考心得
- POJ 1753 Flip Game【翻转棋盘+枚举+dfs】
- JDBC驱动下载汇总
- struts2.xml中使用chain和redirectAction这两个类型结果(type-result)时,报检查错误(validation)