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;
 }
 
 
 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;
 }
 
 
 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使
- Listlist = new LinkedList<>(Arrays.asList(strings)); 
- Arrays.asList()就是一个Adapter
栗子二
- InputStreamReader可以把InputStream转换成Reader
 
     
        