New Java Feature - Switch Expression
概述
JDK 14
在 Java 规范里,表达式完成对数据的操作
一个表达式的结果可以是一个数值(i * 4);或者是一个变量(i = 4);或者什么都不是(void 类型)
Java 语句是 Java 最基本的可执行单元
它本身不是一个数值,也不是一个变量
Java 语句的标志性符号是分号(代码)和大括号(代码块) - if-else 语句、赋值语句等
switch 表达式是一个表达式,而 switch 语句是一个语句
Switch 语句12345678910111213141516171819202122232425262728293031323334353637class DaysInMonth { public static void main(String[] args) { Calendar today = Calendar.getInstance(); int month = today.get(Calendar.MONTH); int year = today.get(Calendar.YEAR); int daysInMo ...
New Java Feature - Pattern Matching
概述
Java 模式匹配是一个新型的、而且还在持续快速演进的领域
类型匹配是模式匹配的一个规范,在 JDK 16 正式发布
一个模式是匹配谓词和匹配变量的组合
匹配谓词用来确定模式和目标是否匹配
在模式和目标匹配的情况下,匹配变量是从匹配目标里提取出来的一个或者多个变量
对于类型匹配来说,匹配谓词用来指定模式的数据类型,而匹配变量就是属于该类型的数据变量
对于类型匹配来说,匹配变量只有一个
模式12345678static boolean isSquare(Shape shape) { if (shape instanceof Rectangle) { Rectangle rect = (Rectangle) shape; return (rect.length == rect.width); } return (shape instanceof Square);}
模式拆分 - 类型判断 + 类型转换 - 增加出错概率
类型判断语句 - 匹配谓词
类型转换语句
声明一个新的本地变量,即匹配变量,来承载 ...
New Java Feature - Sealed
无法穷举
判断一个形状是不是正方形
上述判断 - 一个形状的对象是不是一个正方形的实例
一个形状的对象即使不是一个正方形的实例,也可能是一个正方形
很多形状的特殊形式就是正方形 - 长方形、菱形、梯形、多边形等 - 无法穷举
通过 instanceof 并不能正确判断一个形状是否为正方形
问题根源 - 无限制的扩展性
限制扩展性
OOP 的最佳实践之一,就是把可扩展性限制在可以预测和控制的范围内,而不是无限的扩展性
继承的安全缺陷
一个可扩展的类,子类和父类可能会相互影响,从而导致不可预知的行为
涉及敏感信息的类,增加可扩展性不一定是个优先选项,要尽量避免父类或者子类的影响
在设计 API 时,需要反复思考
一个类,有没有真实的可扩展需求,能不能使用 final 修饰符
一个方法,子类有没有重写的必要性,能不能使用 final 修饰符
限制住不可预测的可扩展性,是实现安全代码、健壮代码的一个重要目标
在 JDK 17 之前,限制可扩展性只有两个方法 - 使用私有类或者 final 修饰符
私有类不是公开接口,只能内部使用,而 final 修饰符则彻底放弃了可扩展性
要么全开放,要 ...
New Java Feature - Record
概述
JDK 16
Java 档案类是用来表示不可变数据的透明载体
OOP
封装 + 继承 + 多态
接口不是多线程安全的 - 将 Public 方法设置成同步方法 - 开销很大
更优方案 - 即使不使用线程同步,也能做到多线程安全 - 不可变对象
天生的多线程安全 - 类对象一旦实例化就不能再修改
简化代码 - 删除读取半径的方法,直接公开半径这个变量 - 与 Go 类似
Circle 一直可以用半径来表达,所以并没有带来违反封装原则的实质性后果
进一步简化
使用公开的只读变量 - 使用 final 修饰符来表明只读变量
公开的只读变量,只在在公开的构造方法中赋值 - 解决对象的初始化问题
公开的只读变量,替换掉了读取的方法 - 减少代码量
声明档案类
Java 档案类是用来表示不可变数据的透明载体
record 关键字是 class 关键字的一种特殊表现形式,用来标识档案类
record 关键字可以使用与 class 关键字差不多一样的类修饰符 - public/static
类标识符 Circle 后,用小括号括起来的参数 - 类似于一个构造方法
...
New Java Feature - Text Blocks
概述
JDK 15
文字块 - 一个由多行文字构成的字符串
复杂字符串
需要处理 - 文本对齐、换行字符、连接符以及双引号的转义字符串 - 不美观 + 不简约 + 不自然
1234567String stringBlock = "<!DOCTYPE html>\n" + "<html>\n" + " <body>\n" + " <h1>\"Hello World!\"</h1>\n" + " </body>\n" + "</html>\n";
所见即所得的文字块
文字块是一个由多行文件构成的字符串
文字块使用新的形式,尝试消除换行符、连接符、转义字符的影响
使得文字对齐和必要的占位符更加清晰,从而简化多行文字字符串的表达
换行符 \n 没有出现在文字块这个
连字符 + ...
New Java Feature - JShell
概述
JDK 9
JShell 是 Java 的交互式编程环境
JShell API 和工具提供了一种在 JShell 状态下评估 Java 编程语言的声明、语句和表达式的方式
JShell 的状态包括不断发展的代码和执行状态
为了便于快速调查和编码
语句和表达式不需要出现在方法中
变量和方法也不需要出现在类中
启动 JShell12345$ jshell| Welcome to JShell -- Version 21.0.7| For an introduction type: /help introjshell>
详尽模式
12345$ jshell -v| Welcome to JShell -- Version 21.0.7| For an introduction type: /help introjshell>
退出 JShell123456$ jshell -v| Welcome to JShell -- Version 21.0.7| For an introduction type: /help introjshell> /exit| Go ...
Observability - OpenTelemetry Python
OverviewStatus and Releases
Traces
Metrics
Logs
Stable
Stable
Development
Version supportOpenTelemetry-Python supports Python 3.9 and higher.
Installation
The API and SDK packages are available on PyPI, and can be installed via pip:
12pip install opentelemetry-apipip install opentelemetry-sdk
In addition, there are several extension packages which can be installed separately as:
12pip install opentelemetry-exporter-{exporter}pip install opentelemetry-instrumentation-{instrumentat ...
Observability - OpenTelemetry Go
OverviewStatus and Releases
The logs signal is still experimental. Breaking changes may be introduced in future versions.
Traces
Metrics
Logs
Stable
Stable
Beta
Getting StartedExample applicationSetup
To begin, set up a go.mod in a new directory:
12345$ go mod init dicego: creating new go.mod: module dice$ lsgo.mod
Create and launch an HTTP server
In that same folder, create a file called main.go and add the following code to the file:
123456789101112package mainimport ( "log" ...
Observability - OpenTelemetry Node.js
OverviewStatus and Releases
Traces
Metrics
Logs
Stable
Stable
Development
Client instrumentation for the browser is experimental and mostly unspecified.
Version Support
OpenTelemetry JavaScript supports all active or maintenance LTS versions of Node.js.
Previous versions of Node.js may work, but are not tested by OpenTelemetry.
OpenTelemetry JavaScript has no official supported list of browsers. It is aimed to work on currently supported versions of major browsers.
OpenTelemetry JavaScript foll ...
Observability - OpenTelemetry Doc V2
Language APIs & SDKs
OpenTelemetry code instrumentation is supported for many popular programming languages
OpenTelemetry code instrumentation is supported for the languages listed in the Statuses and Releases table below.
For Go, .NET, PHP, Python, Java and JavaScript you can use zero-code solutions to add instrumentation to your application without code changes.
If you are using Kubernetes, you can use the OpenTelemetry Operator for Kubernetes to inject these zero-code solutions into your applicat ...















