编辑: 摇摆白勺白芍 | 2013-06-16 |
List strList = list;
@SafeVarags public static List asList(T... a) 使用 ? 使用泛型前 ? 使用泛型 ? 使用尖括号 () 推断类型 List strList = new ArrayList();
List strList = new ArrayList();
List= 0) out.write(buf, 0, n);
} Section Divider 代码块参数 代码块参数 Lambda Lambda 项目 项目 Lambda 项目的动机 ? 摩尔定律、多核芯片 ? 库是 Java 的主要优势之一 C 更加强大的库是优化并行化的关键 ? 更高级的操作往往可以提高代码的可读性和性能 ? 未对并行惯用法提供更好的语言支持,人们会出于本能 使用串行惯用法 关于循环 ― 外部迭代 ? 代码与生俱来就是串行执行的 C 通过 students 进行串行迭代 C 有状态 ― 使用 > 和highestScore C 外部迭代 ― students 的客户端将决定迭代机制 double highestScore = 0.0;
for (Student s :students) { if ((s.gradYear == 2010) && (s.score > highestScore)) highestScore = s.score;
} 假设性内部迭代 ? 本质上非串行执行 C students 遍历不由开发人员决定 C 看上去像是一种功能语言 ? 匿名内部类! double highestScore = students .filter(new Predicate() { public boolean isTrue(Student s) { return s.gradYear == 2010;
}}) .map(new Extractor() { public Double extract(Student s) { return s.score;
}}) .max();
线程 线程 线程 引入 Lambda 表达式 ? 可使用 # 引入 Lambda 表达式 C 向JVM 发送信号以推迟代码执行 C 主体可以是表达式 ? Lambda 表达式不是匿名内部类的语法甜头 C 使用 JSR-292 的MethodHandle 实现 double highestScore = students .filter(#{ Student s -> s.gradYear ==
2010 }) .map(#{ Student s -> s.score }) .max();
SAM 类型 ? SAM 是一个具有单一抽象方法 (Single Abstract Method ? 没有特殊语法,仅仅是一种模式 ? 作用类似于函数类型 C Comparator → (T, T) to Boolean interface Runnable { void run();
} interface Callable { T call();
} interface Comparator { boolean compare(T x, T y);
} interface ActionListener { void actionPerformed(…);
} abstract class TimerTask { … abstract void run();
… } Lambda 表达式是 SAM 类型 ? "SAM 转换"可推断 lambda 转换的 SAM 类型 ? 调用 SAM 的方法会调用 lambda 的主体 ? 即时兼容现有库 Predicate p = # { Student s -> s.gradYear ==
2010 } boolean ok = p.isTrue(harryPotter);
executor.submit(#{-> System.out.println("hello") }) button.addActionListener(#{ ActionEvent aEvt -> System.out.println("hello");
}) 杂项 杂项 杂项 装饰组件 如今您怎么做这些? JLayer ? 最初是 java.net 上的一个开源项目 ? 特性 C Swing 组件的透明装饰器 C 控制其子组件的绘制 C 捕获所有输入及焦点事件 // wrap your component with JLayer JLayer layer = new JLayer(panel);
// custom ui provides all extra functionality layer.setUI(myLayerUI);
// add the layer as usual component frame.add(layer);
FileSystem 与Path API ? java.nio.file.FileSystem C 文件系统接口 C 可以引用 FAT、NFS、Samba、ZIP、ZFS C 利用提供程序 API 可以实现您自己的文件系统 ? java.nio.file.Path C 一个引用,用系统相关路径定位一个文件 复制和移动文件 //Defaults to user.dir FileSystem fs = FileSystems.getDefault();
Path photo = fs.getPath("/photo.jpg");
Path destination = fs.getPath("/archive/best.jpg");
try { photo.copyTo(destination , StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) { e.printStackTrace();
} 硬件和软件,集成设计、卓越性能