Java 9 新特性 – 内部类的方块操作符

自Java7引入方块操作符(<>)以来,其目标是提高代码的可读性。然而,直到Java9,这一操作符才被允许在匿名内部类中使用,进一步简化了代码并增强了阅读体验。本文通过示例展示了如何利用Java9的这一特性,使得匿名类的类型推导更加直观。
方块操作符 ( <> ) 在 Java 7 中就引入了,目的是为了使代码更可读。
但是呢,这个操作符一直不能在匿名内部类中使用
Java 9 修正了这个问题,就是可以在匿名内部类中使用方块操作符了,在匿名类大行其道的今天,这才叫优化了阅读体验...
我们来看看一段 Java 9 之前的代码
DiamondOperatorTester.java
[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
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
public class DiamondOperatorTester {
        public static void main(String[] args) {
           Handler<Integer> intHandler = new Handler<Integer>( 1 ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           intHandler.handle();
           Handler<? extends Number> intHandler1 = new Handler<Number>( 2 ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           intHandler1.handle();
           Handler<?> handler = new Handler<Object>( "test" ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           handler.handle();   
       
     }
     abstract class Handler<T> {
        public T content;
 
        public Handler(T content) {
           this .content = content;
        }
 
        abstract void handle();
     }

运行结果如下
[Java]  纯文本查看  复制代码
?
1
2
3
4
[[email]yufei @www .twle.cn[/email] java9]$ javac DiamondOperatorTester.java && java DiamondOperatorTester
     1
     2
     test

不知道你是否看出来了,对于下面这两条语句
[Java]  纯文本查看  复制代码
?
1
2
3
Handler<? extends Number> intHandler1 = new Handler<Number>( 2 )
 
     Handler<?> handler = new Handler<Object>( "test" )
 
后面的匿名类中的那个 <Number> 和 Handler<Object> 中的尖括号的类型是可以推导出来的。
因为 Java 是强类型语言,所以,对于匿名内部类来说,赋值的变量类型其实就是内部类的变量类型
如果使用了推导,就可以改成下面这样
[Java]  纯文本查看  复制代码
?
1
2
3
Handler<? extends Number> intHandler1 = new Handler<>( 2 )
 
     Handler<?> handler = new Handler<>( "test" )
可读性是不是增强了,这样大家一眼就看出了匿名类的类型是它们赋值变量的类型
Java 9 也是这么做的,方块操作符 <> 的作用就是这个
因此,我们在 Java 9 以上的版本中,可以将范例改成下面这种方式
[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
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
public class DiamondOperatorTester {
        public static void main(String[] args) {
           Handler<Integer> intHandler = new Handler<>( 1 ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           intHandler.handle();
           Handler<? extends Number> intHandler1 = new Handler<>( 2 ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           intHandler1.handle();
           Handler<?> handler = new Handler<>( "test" ) {
              @Override
              public void handle() {
                 System.out.println(content);
              }
           };
           handler.handle();   
       
     }
     abstract class Handler<T> {
        public T content;
 
        public Handler(T content) {
           this .content = content;
        }
 
        abstract void handle();
     }
运行结果也是一样的
[Java]  纯文本查看  复制代码
?
1
2
3
4
[[email]yufei @www .twle.cn[/email] java9]$ javac DiamondOperatorTester.java && java DiamondOperatorTester
    1
    2
    test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值