Java 12.11.2023

This commit is contained in:
StNicolay 2023-11-19 05:54:02 +00:00
parent 300f663b50
commit 3c374abf6b

View File

@ -763,3 +763,112 @@ class Transaction3<T extends Account & Accountable> { // T имплементи
T account;
}
```
## Records
> Записи или Records позволяют быстро содздавать классы, уменьшая количесво бойлерплейта. Записи автоматически определяют инициализатор, методы hashCode, toString и equals. Поля являются *private* и *final* и имеют одноимённые геттеры
```Java
record Person(String name, int age) { }
```
Можно добавить дополнительную логику в созданный конструктор
```Java
record Person(String name, int age) {
Person {
if(age < 1 || age > 110) {
age = 18;
}
}
}
```
Можно полностью переписать изначальный конструктор
```Java
record Person(String name, int age) {
Person(String name, int age) {
this.name = name;
if(age < 1 || age > 110) {
age = 18;
}
this.age = age;
}
}
```
Мы можем определять какие-то другие конструкторы, но они вызывать канонический конструктор
```Java
record Person(String name, int age) {
Person(String firstName, String lastName, int age) {
this(firstName + " " + lastName, age);
}
}
```
Можно также переопределить остальные методы
```Java
record Person(String name, int age) {
public String name() {
return "Mister " + name;
}
public String toString() {
return "What a fine gentleman we have here"
}
}
```
### Ограничения record
Классы *record* не могут наследовать, быть наследованными и абстрактными, но могут имплементировать интерфейсы. Нельзя добавлять дополнительные нестатические пора и инициализаторы
```Java
record Person(String name, int age) {
static int minAge;
static { // Это статический инициализатор
minAge = 18;
}
}
```
## Upcasting & Downcasting
```Java
class Person {}
class Employee {}
class Main {
public static void main(String[] args) {
Object bob = new Person(); // Upcasting
Person tom = new Employee(); // тоже upcasting
Person bob2 = (Person)bob;
}
}
```
## Comparator & Comparable
```Java
class Person implements Comparable<Person> {
private String name;
Person(String name) {
this.name = name;
}
String getName() {
return name;
}
// Отриц число, если меньше, 0, если равно, и полож число, если больше
public int compareTo(Person p) {
return name.compareTo(p.getName());
}
}
```