0. Прочитав эту статью, вы узнаете
- 6 практичных новых функций Java
Всего в этой статье около 1760 слов, а время чтения примерно равно одной песне.Звони в мои колокола, Энрике Иглесиас.
С 2018 года Java приняла стратегию выпуска новых версий каждые шесть месяцев. Эта стратегия сохраняет Java свежей и сильной.В этой статье я расскажу вам о 6 практических новых функциях Java.
1. Необязательный класс
NullPointerException — самое классическое из всех исключений Java. С ним должен быть знаком каждый, и он часто появляется неожиданно, вызывая головную боль. К счастью, в Java 8 для нас появился класс Optional, а в Java 10 этот механизм был усовершенствован.
По сути, класс Optional позволяет вам обернуть переменную, а затем использовать методы оболочки для более лаконичного обращения с Null.
Рассмотрим сравнительный пример:
Пример 1.1. Не использовать нулевой указатель необязательного класса
public class MyClass {
public static void main(String args[]) {
InnerClass innerClass = null;
// 这里对引用为null的变量进行了方法访问,产生一个NullPointerException
System.out.println("innerClass = " + innerClass.getName());
}
}
class InnerClass {
String name = "";
public String getName() {
return this.name;
}
}
Теперь, как мы можем использовать Optional, чтобы избежать описанной выше ситуации?
Необязательный класс имеет метод isPresent(), который вы можете использовать в качестве проверки if. Но у нас есть более короткий метод — ifPresent(), который продолжит выполнение кода только в том случае, если значение присутствует.
Пример 1.2 Использование нулевого указателя класса Optional
public class MyClass {
public static void main(String args[]) {
InnerClass innerClass = null;
Optional fooWrapper = Optional.ofNullable(innerClass);
fooWrapper.ifPresent(x -> System.out.println("innerClass = " + x.getName()));
}
}
class InnerClass {
String name = "";
public InnerClass(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
Конечно, когда вы используете класс Optional, вы также можете использовать метод orElse() для вызова значения по умолчанию или использовать orElseGet() для предоставления ссылки на функцию.
2. Рекордный класс
Все мы знакомы с DTO (Data Transfer Object), который обычно используется для хранения и передачи данных, хранящихся в базах данных, файловых системах и т. д. Ключевое слово Record было введено в Java 14 и улучшено в Java 15.
В примере 3.1 показано, как определить DTO до введения класса Record.
Пример 3.1. Простой DTO
public class MyClass {
public static void main(String args[]) {
Student student = new Student("Jay", 18);
// . . .
}
}
class Student {
String name;
Integer age;
public Student(String name, Integer age){
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public Integer getAge(){
return this.age;
}
}
Мы видим, что приведенный выше пример полон подробного шаблонного кода, теперь мы можем использовать ключевое слово Record для достижения цели упрощения DTO.
Пример 3.2 Использование ключевого слова Record
public class MyClass {
public static void main(String args[]) {
Student student = new Student("Jay", 18);
// . . .
}
}
public record Student(String name, Integer age) {}
Тип Record также определяет реализации по умолчанию equals(), hashCode() и toString() и позволяет разработчикам переопределять эти реализации. Мы также можем предоставить собственный конструктор.
Также обратите внимание, что класс Record не может быть подклассом.
4. Новые строковые методы
В Java 10 и Java 12 было добавлено несколько полезных новых методов String. В дополнение к методам манипулирования строками были введены два новых метода для упрощения доступа к текстовым файлам.
4.1 Новые строковые методы в Java 10
- isBlank(): возвращает true, если строка пуста или содержит только пробелы (включая табуляцию).
- lines(): разбивает строку на поток строк, каждая строка содержит одну строку. Каждая строка отделяется /r или /n или /r/n.
Пример 4.1.1 строки()
import java.io.IOException;
import java.util.stream.Stream;
public class MyClass {
public static void main(String args[]) throws IOException{
String str = "test \ntest2 \n\rtest3 \r";
Stream lines = str.lines();
lines.forEach(System.out::println);
}
}
/*
outputs:
test
test2
test3
*/
- strip(), stripLeading(), stripTrailing(): удалить пробелы в начале и в конце, только в начале и только в конце соответственно.
- repeat(int times): возвращает строку, взятую из исходной строки и повторяющуюся указанное количество раз.
- readString(): чтение строки непосредственно из пути к файлу.
Пример 4.1.2. readString()
Path path = Path.of("test.txt");
String text = Files.readString(path);
- writeString(Path path): Запишите строку непосредственно в файл по указанному пути.
4.2 Новые строковые методы в Java 12
- indent(int level): добавьте или удалите пробелы в начале каждой строки строки, чтобы настроить отступ строк строки.
- transform(Function f): применяет заданное лямбда-выражение к строке.
5. Переключение выражений
В Java 12 представлены новые выражения переключателя, которые позволяют встроенное использование переключателя внутри операторов. Другими словами, выражение переключения возвращает значение.
Java 13 пошла еще дальше и представила ключевое слово yield. Использование ключевого слова yield может напрямую выйти из текущего блока переключателей и вернуть значение.
Java 14 имеет новый синтаксис выражения переключения как полноценную функцию.
Давайте посмотрим на сходства и различия между старыми и новыми выражениями Switch.
Пример 5.1 Древний Java-переключатель
public class Test {
public static void main(String args[]) {
int size = 3;
String message = "";
switch (size) {
case 1:
message = "one";
break;
case 3:
message = "three";
break;
default:
message = "unknown";
break;
}
System.out.println("The number is " + message);
}
}
Этот код уже довольно многословен, давайте посмотрим, как мы можем его упростить.
Пример 5.2. Новый переключатель Java
public class Test {
public static void main(String args[]) {
int size = 3;
var message = switch (status) {
case 1 -> "one";
case 2 -> "two";
case 3 -> "three";
default -> {
System.out.println("closed");
yield "unknown";
}
};
System.out.println("The number is " + message);
}
}
6. Text block
Java 13 решает давнюю проблему работы со сложными текстовыми строками в Java с введением текстовых блоков. Java 14 дополняет эту поддержку.
Такие вещи, как JSON, XML и SQL, сведут вас с ума многоуровневым вложенным экранированием. В Java встраивание фрагмента HTML, XML, SQL или JSON в строковый литерал обычно требует тщательного редактирования путем экранирования и конкатенации, прежде чем код, содержащий фрагмент, может быть скомпилирован. Фрагмент часто трудно читать и утомительно поддерживать.
Давайте рассмотрим следующий пример, в котором новый синтаксис текстового блока используется для создания фрагмента JSON.
Пример 6.1 JSON с использованием текстовых блоков
class TextBlock {
public static void main(String args[]) {
String json = """
{
"name" : "Jay",
"age" : "18"
}
""";
System.out.println(json);
}
}
В приведенном выше примере, не видя escape-символа, обратите вниманиетройные двойные кавычкисинтаксис.
7. Герметичный класс - закрытый класс
Java 15 представила концепцию вложенных классов. Короче говоря, новое запечатанное ключевое слово позволяет вам определить, какие классы могут быть подклассами интерфейса.
Значение закрытого класса заключается в том, что расширяемость может быть ограничена предсказуемым и контролируемым диапазоном через закрытый класс, который предоставляет новые возможности для проектирования и реализации интерфейса; за счет комбинации с тестированием типов класс разрешений может быть исчерпывающим. нам больше контроля над безопасностью и надежностью нашего кода.
Пример 7.1 Закрытый класс
public abstract sealed class Pet
permits Cat, Dog, Bird {...}
В приведенном выше примере мы использовали запечатанное ключевое слово, чтобы указать, какие классы могут расширять класс Pet.
8. Заключение
Вышеизложенное — это мой краткий обзор шести практических новых функций Java, понимаете?
Спасибо за просмотр этого выпускаЙи Джун@Monday Commuter Radio. Если вы думаете, что это неплохо, поддержите меня три раза подряд, увидимся в следующий раз.