Java 9 的新功能:不可变集合
在 Java 7 版本以前,如果使用带泛型的接口、类定义变量,那么调用构造器创建对象时构造器的后面也必须带泛型,这显得有些多余了。例如如下两条语句:
- List<String> strList = new ArrayList<String>();
- Map<String, Integer> scores = new HashMap<String, Integer>();
从 Java 7 开始,Java 允许在构造器后不带完整的泛型信息,只要给出一对尖括号<>
即可。Java 可以推断出尖括号里应该是什么泛型信息。
即上面两条语句可以改写为如下形式:
- List<String> strList = new ArrayList<>();
- Map<String, Integer> scores = new HashMap<>();
把两个尖括号并排放在一起非常像一个菱形,这种语法也就被称为“菱形”语法。下面程序示范了 Java 7 的菱形语法。
- public class Test {
- public static void main(String[] args) {
- // Java自动推断出ArrayList的<>里应该是String
- List<String> names = new ArrayList<>();
- names.add("JAVA中文网Java入门教程");
- names.add("JAVA中文网Spring入门教程");
- // 遍历names集合,集合元素就是String类型
- names.forEach(ele -> System.out.println(ele.length()));
- // Java 自动推断出 HashMap 的<>里应该是 String,List<String>
- Map<String, List<String>> coursesInfo = new HashMap<>();
- // Java自动推断出ArrayList的<>里应该是String
- List<String> courses = new ArrayList<>();
- courses.add("Java入门教程");
- courses.add("Python基础教程");
- coursesInfo.put("JAVA", courses);
- // 遍历 Map 时,Map 的 key 是 String 类型,value List<String>类型
- coursesInfo.forEach((key, value) -> System.out.println(key + "-->" + value));
- }
- }
上面程序中代码第 4、10 和 12 行代码就是“菱形”语法的示例。从该程序不难看出,“菱形”语法对原有的泛型并没有改变,只是更好地简化了泛型编程。
Java 9 再次增强了“菱形”语法,它甚至允许在创建匿名内部类时使用菱形语法,Java 可根据上下文来推断匿名内部类中泛型的类型。下面程序示范了在匿名内部类中使用菱形语法。
首先定义一个接口:
- interface Foo<T> {
- void test(T t);
- }
创建实现类:
- public class AnnoymousTest {
- public static void main(String[] args) {
- // 指定Foo类中泛型为String
- Foo<String> f = new Foo<>() {
- // test()方法的参数类型为String
- public void test(String t) {
- System.out.println("test 方法的 t 参数为:" + t);
- }
- };
- // 使用泛型通配符,此时相当于通配符的上限为Object
- Foo<?> fo = new Foo<>() {
- // test()方法的参数类型为Object
- public void test(Object t) {
- System.out.println("test 方法的 Object 参数为:" + t);
- }
- };
- // 使用泛型通配符,通配符的上限为Number
- Foo<? extends Number> fn = new Foo<>() {
- // 此时test ()方法的参数类型为Number
- public void test(Number t) {
- System.out.println("test 方法的 Number 参数为:" + t);
- }
- };
- }
- }
上面程序先定义了一个带泛型声明的接口,接下来第 4、11 和 18 行代码分别示范了在匿名内部类中使用菱形语法。第 4行代码声明变量时明确地将泛型指定为 String 类型,因此在该匿名内部类中 T 类型就代表了 String 类型;第 11 行代码声明变量时使用通配符来代表泛型(相当于通配符的上限为 Object),因此系统只能推断出 T 代表 Object,所以在该匿名内部类中 T 类型就代表了 Object 类型;第 18 行代码声明变量时使用了带上限(上限是 Number)的通配符,因此系统可以推断出 T 代表 Number 类。
无论以上哪种方式,Java 9 都允许在使用匿名内部类时使用菱形语法。
推荐阅读
-
Java 9 的新功能:不可变集合
-
aps是什么意思_不同的富士APS-C画幅微单区别在哪里,档次是怎么划分的?-X-A系列原本指的是富士的入门级微单,最大的特点是没有使用富士X-Trans™CMOS 传感器,目前在售的有两款,分别是XA5和XA7。 富士(FUJIFILM)X-A5/XA5 15-45套机 富士(FUJIFILM)X-A7/XA7 15-45套机 目前这两款相机都处于历史最低价附近,XA5套机2699元,XA7套机3999元。XA5就是一个标准的入门级相机,定位就是时尚小巧自拍,在2699这个价位不要对它的性能有太多的奢求。 XA7价格来到了3999元,这就很有意思了,富士把入门型的相机价格推到了4000元,并且提供了自拍翻转屏和4K30P视频录制,这样一款相机就很有性价比了。 XE3是老款的中端相机,价格和入门级的XA7是一样的,都是3999元,这两款相机如何做选择呢?XE3有着更多的按键意味着更好的操控,但屏幕不是自拍翻转屏所以这点不如XA7好用。 要注意的是XE3用的是富士独有的X-Trans™CMOS III传感器,XA7是普通的2400万像素传感器,你可以理解为X-Trans才是富士的精髓。 富士(FUJIFILM)X-E3 15-45套机 当然,买新不买旧,XA7的新功能和自拍翻转屏可能会更适合你。 XT200是富士专门针对vlog市场推出的相机,其实之前的XA7也可以拍摄vlog,但XT200是富士官方宣传中的第一款vlog相机。数码防抖+3.5mm 麦克风口+自拍翻转屏+无裁切4K30P,这些都是XT200的优势,但这款相机也是普通的2400万像素传感器,没有用富士独有的X-Trans,可能是从价格角度考虑做了阉割吧。 富士(FUJIFILM)X-T200/XT200 微单相机 Vlog相机 富士XT30是我认为富士性价比最高的微单照相机,注意我说的是照相机。理由很简单,因为从拍照角度来看XT30和XTXT3几乎没有明显差距,主要是操控差了一些、视频性能大幅削弱,但好歹也是个有着双波轮+曝光补偿波轮+快门速度波轮的相机,操控方面不会太差的。视频方面也有着超采4K 30P的规格,支持F-log输出。 可以这么说,如果你只拍照,那么XT30是富士微单中性价比最高的,视频方面XT30也不差,只不过没有专业的10bit和4K60P而已。 富士(FUJIFILM)X-T30/XT30 15-45套机 XT3和XT4得放在一起说,这两款相机其实都挺好,420 10bit 4K60P的专业视频模式基本代表了APS-C画幅的上限水平。XT4还提升了电池续航增加了五轴防抖,配上富士独特的胶片滤镜,不管是拍照还是拍视频都非常优秀。 不要觉得这两款相机贵,同价位里能做到4K60P的微单也就是M43画幅的GGHGH5S,最便宜的G9机身也要7000多,这APS-C画幅的XT3机身接近8000也算合理价格范围内。除此之外的4K60P机身只有13998的松下S5和15999的佳能R6了。 富士(FUJIFILM)X-T3/XT3 1855套机 富士(FUJIFILM)X-T4/XT4 微单相机 套机(18-55mm) B站更新4K视频投稿后有很多人想拍摄4K升格,在很长一段时间里富士XT3和XT4是最优选,毕竟兼顾视频和拍照,对焦也还算能用。 X-Pro3和X-Pro2这两款微单可以算是旁轴相机,是富士官方意义上的旗舰级相机。从用料做工操控按键角度来说的确是旗舰级别,但视频性能方面只有4K30P,价格却比XT3还贵,可能这就是旁轴情怀带来的溢价吧。 富士(FUJIFILM)X-Pro3 微单相机 机身 黑色 我在之前的文章里提过很多次,有一些相机属于如果你想买你压根不会看测评,如果你犹豫那么这款相机不适合你,为什么这么说,因为有一些比较小众的相机可能在性能上并不好,但独特的外形、操控、体积、传承赋予了它独特的定位。譬如富士X-Pro系列微单就是旁轴的电子化,理光GR传承大师的扫街理念,尼康DF的外形源自胶片时代的相机,这些相机就不是针对大多数消费者的,定位就是小众。所以我说喜欢就买,不要考虑什么性能规格。 X100系列相机是一款不可换镜头的等效35mm旁轴数码相机,从外形看就是经典的复古造型。这两款相机和X-Pro3一样,如果你喜欢那就买,别犹豫, 你在市场上找不到同类型的其他数码相机,徕卡Q是28mm,索尼RX1R系列是35mm但外形不够复古,X100系列就是独特的你没有其他选择。 那么X100F和X100V该如何选择呢?X100F的镜头很一般甚至算不上好,如果我没记错的话和初代的X100是同款镜头,X100V的镜头是全新制作的很棒,X100V的机身性能也和XTX-Pro3差不多。 富士(FUJIFILM)X100F 数码相机 旁轴 2430万像素 富士(FUJIFILM)X100V 数码相机 旁轴 2610万像素 还是那句话,这两款相机也是那种如果你喜欢那就毫不犹豫下单的类型,而且这两款相机也没有竞品。 以前不推荐富士的原因是原厂镜头太贵,现在唯卓仕给富士出了四款可以自动对焦的大光圈镜头,覆盖35到130mm的焦段,可以基本满足人像摄影爱好者的需求。拍风景的话国产很多镜头厂商都有富士卡口的手动镜头可以选择,从这个角度来说富士微单就非常值得入手了。 和友商竞品相比: