0%

adapter

Adapter


栗子

life

  • 中美插座标准不同,需要适配器去转接
  • 我的小米8没有耳机插孔,需要转接线

多线程

  • 问题

    • 我有一个Task继承自Callable
    • 我的Thread的构造方法需要一个Runnable
  • 解决方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import java.util.concurrent.Callable;

    public class LeetCode {
    public static void main(String[] args) {
    Callable<Long> callable = new Task(123450000L);
    Thread thread = new Thread(new RunnableAdapter(callable));
    thread.start();
    }
    }

    class RunnableAdapter implements Runnable {
    private Callable<?> callable;

    RunnableAdapter(Callable<?> callable) {
    this.callable = callable;
    }

    @Override
    public void run() {
    try {
    callable.call();
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }

    }

    class Task implements Callable<Long> {
    private long num;

    public Task(long num) {
    this.num = num;
    }

    @Override
    public Long call() throws Exception {
    long sum = 0;
    for (long i = 0; i < num; i++) {
    sum += i;
    }
    System.out.println("result:" + sum);
    return sum;
    }

    }
    • 整一个RunnableAdapter
    • 它的构造方法接受一个Callable
    • 它的run方法内部运行Callable的call方法

编写步骤

implement目标接口(上面的栗子中是Runnable)

内部持有一个待转换接口(上面的栗子中是Callable)

在Adapter类的方法里调用待转换接口的方法

应用

栗子一

  • 我有一个String数组
  • 我想把这个数组当list使
  • List list = new LinkedList<>(Arrays.asList(strings));
  • Arrays.asList()就是一个Adapter

栗子二

  • InputStreamReader可以把InputStream转换成Reader