栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Guava ForwardingList用法示例

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Guava ForwardingList用法示例

ForwardingList
(后者
extendsForwardingCollection
extendsForwardingObject
实现了修饰符模式)。

要使用它,您只需要做两件事:

  • @Override delegate()
    返回方法转发到的支持委托实例
  • @Override``List
    您想要/需要装饰的任何方法

装饰器模式允许您使用合成而不是继承( Effective Java 2nd Edition,通过继承实现Favor合成
),并且

ForwardingList
Guava提供了一个方便的模板来编写您自己的
List
实现,从而为您提供所有管道机制。

请注意,如果您打算装饰

ArrayList
,则可能希望
ForwardingList
子类也实现
RandomAccess


例:
ListWithDefault

这是一个(不完整!)示例,该示例使用给定的默认值

ForwardingList
替换
null
委托中的值。

import java.util.*;import com.google.common.collect.*;public class ListWithDefault<E> extends ForwardingList<E> {    final E defaultValue;    final List<E> delegate;    ListWithDefault(List<E> delegate, E defaultValue) {        this.delegate = delegate;        this.defaultValue = defaultValue;    }    @Override protected List delegate() {        return delegate;    }    @Override public E get(int index) {        E v = super.get(index);        return (v == null ? defaultValue : v);    }    @Override public Iterator<E> iterator() {        final Iterator<E> iter = super.iterator();        return new ForwardingIterator<E>() { @Override protected Iterator<E> delegate() {     return iter; } @Override public E next() {     E v = super.next();     return (v == null ? defaultValue : v);  }        };    }}

然后我们可以如下进行测试:

    public static void main(String[] args) {        List<String> names = new ListWithDefault<String>( Arrays.asList("Alice", null, "Bob", "Carol", null), "UNKNOWN"        );        for (String name : names) { System.out.println(name);        }        // Alice        // UNKNOWN        // Bob        // Carol        // UNKNOWN        System.out.println(names);        // [Alice, null, Bob, Carol, null]}

请注意,这是 _不完整的_实现。该

toString()
方法仍然返回委托的
toString()
,它不知道默认值。
@Override
为了实现更完整的实现,还必须使用其他一些方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399951.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号