• JDK10 新特性 局部变量类型推断


    JDK 10 主要新特性在于支持 var 申明 的局部变量,相当于一个泛型

     1 package com.lomi.jdk10;
     2 
     3 import org.junit.Test;
     4 
     5 import java.awt.print.Book;
     6 import java.util.*;
     7 import java.util.function.Supplier;
     8 
     9 /**
    10  *
    11  * jdk10 新特性
    12  * @author ZHANGYUKUN
    13  * @date 2022/6/17
    14  */
    15 public class JDK10NewTest {
    16 
    17 
    18     /**
    19      * 1 局部变量类型推断(通过右边推断,右边必须是明确的类型)
    20      * 2 var 不是关键字,而是一个特殊的类型( 或者把它当做一个特殊的泛型 )
    21      * 3 var 编译以后会变成明确的类型
    22      */
    23     @Test
    24     public void test1(){
    25         // var 不是关键字,而是一个特殊的类型
    26         var var = "var";
    27 
    28 
    29         var a  = 1L;
    30         System.out.println(  a );
    31 
    32         //修改别的类型是不允许的,但是可以自动转化的类型是可以
    33         //a = "";
    34         a = 2;
    35 
    36 
    37         //var 右边不是lamdda 表达式。lamdda 表达式是通过左边的接口函数的类型推断出来的。是不确定的类型
    38         Supplier f =  ()->{ return 1; };
    39         //var f2 =  ()->{ return 1; };
    40 
    41         //右边的泛型参数如果不指定就是Object
    42         Collection<String> colle1 = Set.of("1","2","3");
    43         var colle2 = new HashSet<>();
    44 
    45         //省略类型的静态数组不能指向 var(我个人觉得这个应该允许,右边的是明确的值)
    46         String[] array0 = new String[]{"1","2","3"};
    47         String[] array1 = {"1","2","3"};
    48         Object[] array11 = {1,"2", Long.parseLong("1" ) };
    49         //var array2 = {"1","2","3"};
    50 
    51         //var 不能指向空值,因为空值是不明确的类型
    52         Integer int1 = null;
    53        // var int2 = null;
    54 
    55 
    56         //var 定义返回值类型,和形参类型,返回值和形参本来就是用来约束类型的。
    57 
    58 
    59         //var 不能是 成员变量,因为成员变量有默认值。var 不是明确的类型,不能知道默认值,
    60         // 而且成员变量应该是明确的类型,var 的 使用场景是类似于 循环遍历之类的类型明确 ,使用者毫不关心,不需要手动声明的场景
    61 
    62 
    63         //var的正确使用姿势(我们其实不关心内循环遍量的类型,因为它只能是那个确定类型,相当于 idea的 new Object().var+回车 自动推断变量类型)
    64         Map<String, String> map = Map.ofEntries(Map.entry("key1", "value1"), Map.entry("key2", "valu2"));
    65         for(var entry : map.entrySet()){
    66             System.out.println(  entry.getKey() );
    67             System.out.println(  entry.getValue() );
    68         }
    69 
    70     }
    71 
    72 
    73 
    74     /**
    75      *
    76      *   Optional 添加 orElseThrow 方法, 取不到 直接 抛出异常,而不是在在使用的时候才抛出异常
    77      *
    78      */
    79     @Test
    80     public void test2(){
    81 
    82         var optional =   Optional.of("");
    83         optional.orElseThrow();
    84 
    85 
    86     }
    87 
    88 
    89 
    90 
    91 
    92 
    93 
    94 }
    95   
  • 相关阅读:
    AppScan安全问题解决方案
    WPF方法 获取控件在屏幕的位置和自动控件位置
    WPF获取鼠标点击位置和API使用
    system.windows.controls
    .net 获取项目的根目录
    InvokeRequired
    控件取图片和矩形框 小测试
    mariadb 设置远程访问
    代码生成器 链接
    分享个网站
  • 原文地址:https://www.cnblogs.com/cxygg/p/16387059.html
Copyright © 2020-2023  润新知