适配器方法惯用法

Posted considinej

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适配器方法惯用法相关的知识,希望对你有一定的参考价值。

如果现有一个Iterable类,你想要添加一种或多种在foreach语句中使用这个类的方法,应该怎么做?

一种解决方案是所谓的适配器方法的惯用法。“适配器”部分来自于设计模式,因为你必须提供特定的接口以满足foreach语句。当你有一个接口并需要另一个接口时,编写适配器就可以解决问题。这里,希望在默认的前向迭代器的基础上,添加产生反向迭代器的能力,因此不能使用覆盖,而是添加一个能够产生Iterable对象的方法,该对象可以用于foreach语句。

 

import java.util.*;

class ReversibleArrayList<T> extends ArrayList<T>{
    public ReversibleArrayList(Collection<T> c) {super(c);}
    public Iterable<T> reversed() {
        return new Iterable<T>() {
            public Iterator<T> iterator() {
                return new Iterator<T>() {
                    int current = size() - 1;
                    public boolean hasNext() {return current > -1;}
                    public T next() {return get(current--);}
                    public void remove() {
                        throw new UnsupportedOperationException();
                    }
                };
            }
        };
    }
}

public class AdapterMethodIdiom {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ReversibleArrayList<String> ral = new  
                ReversibleArrayList<String>(
                        Arrays.asList("To be or not to be".split(" ")));
        for(String s:ral)
            System.out.print(s+" ");
        System.out.println();
        for(String s:ral.reversed())
            System.out.print(s+" ");
    }

}

 

 

来自 Thinking in Java

 

以上是关于适配器方法惯用法的主要内容,如果未能解决你的问题,请参考以下文章

java adapter(适配器)惯用方法

线程函数传 C++ 类实例指针惯用法

《编写高质量代码 改善python程序的91个建议》第二章 惯用法 8-18

Kotlin语言的惯用法

如何使用 Android 片段?

ProGuard惯用法