Java 12.11.2023
This commit is contained in:
parent
300f663b50
commit
3c374abf6b
109
Java/Java.md
109
Java/Java.md
@ -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());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user