一文梳理Java 8后的新功能

网友投稿 272 2022-08-29


一文梳理Java 8后的新功能

目录文本块(Text Blocks)本地变量类型推断(Local Variable Type Inference)switchinstance of操作符的模式匹配(Pattern Matching for the instanceof Operator)record 类参考文档总结

为什么要写这篇文章

经过了若干年的发展,java逐步从java8升级为java11,java17。

让我们对比学习一下最新一版的LTS版本和java8比起来让代码简化了多少。

文本块(Text Blocks)

这个写法有些类似于 javascript、 Lua等脚本语言。方便识别html、json等格式复杂的字符串。

public class StringTest {

public static void main(String[] args) throws Exception {

// GDRzr传统写法

String json =

"{\n" +

" \"key\":\"a\",\n" +

" \"value\":\"b\"\n" +

"}";

// 优化后写法

String json2 = """

{

"key":"a",

"value":"b"

}

""";

// 返回为 true

System.out.println(json == json2);

}

}

本地变量类型推断(Local Variable Type Inference)

这一点也是在一些脚本语言中常见的,类似于 var 表示变量,val 表示常量。

public static void main(String[] args) throws Exception {

//集合

// immutable map build

var map = Map.of(

"cat", "猫",

"dog", "狗",

"fish", "鱼");

// immutable set build

var set = Set.of("1", "2", "3");

// immutable list build

var list = List.of(1, 2, 3, 4, 5);

// 循环语句

for (var i = 1; i < list.size(); i++) {

System.out.println(i);

}

for (var i : list) {

System.out.println(i);

}

// 异常

try (var in = new ByteArrayInputStream("123".getBytes())) {

System.out.println(new String(in.readAllBytes(), "utf-8"));

} catch (Exception e) {

System.out.println(e);

}

// lambda 表达式 意思相同

BiFunction biFunction = (a, b) -> a + b;

BiFunction biFunction2 = (var a, var b) -> a + b;

}

switch

public static void main(String[] args) throws Exception {

var eating = Eating.BREAKFAST;

String eatingZnString = "";

// 传统写法

switch (eating) {

case BREAKFAST:

case LUNCH:

eatingZnString = "早午饭";

break;

case DINNER:

eatingZnString = "晚饭";

break;

default:

throw new Exception();

}

System.out.println(eatingZnString);

// 优化后写法

System.out.println(

switch (eating) {

case BREAKFAST,LUNCH -> "早午饭";

case DINNER -> "晚饭";

default -> throw new Exception();

}

);

}

instance of操作符的模式匹配(Pattern Matching for the instanceof Operator)

interface Animal {}

class Cat implements Animal {

public void mew() {

System.out.println("喵");

}

}

class Dog implements Animal {

public void woof() {

System.out.println("汪");

}

}

publihttp://c class Test {

// 传统写法

public static void sounds(Animal animal) {

if (animal instanceof Cat) {

Cat cat = (Cat) animal;

cat.mew();

} else if (animal instanceof Dog) {

Dog dog = (Dog) animal;

dog.woof();

} else {

throw new IllegalArgumentException("没有这种动物的叫声");

}

}

// 优化写法

public static void betterSounds(Animal animal) {

if (animal instanceof Cat cat) {

cat.mew();

} else if (animal instanceof Dog dog) {

dog.woof();

} else {

throw new IllegalArgumentException("没有这种动物的叫声");

}

}

}

record 类

// 传统类

public final class People {

public People(String name, int age) {

this.name = name;

this.age = age;

}

public String name() {

return this.name;

}

public int age() {

return this.age;

}

public boolean equals(People people) {...}

public int hashCode() {...}

public String toString() {...}

}

// 优化后的类

public record People (String name, int age){

}

// 更多用法

public record People (String name, int age){

// 静态字段

static int teenageAge;

// 静态初始化

static {

teenageAge = 17;

}

// 静态方法

public static People buildTeenage(String name) {

return new People(name , teenageAge);

}

// 优化后的构造方法

public People {

if (age < 0) {

throw new IllegalArgumentException("年龄不能小于0");

}

}

}

参考文档

Java Language Updates

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python3 集合(python3ide下载)
下一篇:Python3 注释(python3.10.6安装教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~