Sobes.tech
Junior

Co víš o třídě Object?

sobes.tech AI

Odpověď od AI

java.lang.Object je kořenová třída v hierarchii tříd v jazyce Java. Každá třída dědí implicitně od Object.

Hlavní metody:

  • equals(Object obj): Porovnává aktuální objekt s jiným objektem na rovnost. Ve výchozím nastavení porovnává reference.
  • hashCode(): Vrací hash kód objektu. Používá se v kolekcích založených na hash tabulkách (například HashMap, HashSet). Pokud jsou dva objekty podle equals() stejné, jejich hashCode() musí být stejné.
  • toString(): Vrací řetězcovou reprezentaci objektu. Ve výchozím nastavení vrací název třídy + @ + hash kód ve formátu hexadecimálního čísla. Často je přepsáno pro poskytnutí informativnějšího výstupu.
  • getClass(): Vrací objekt Class, který reprezentuje třídu objektu za běhu.
  • notify(): Obnoví provádění vlákna, které čeká na monitoru tohoto objektu.
  • notifyAll(): Obnoví provádění všech vláken čekajících na monitoru tohoto objektu.
  • wait() / wait(long timeout) / wait(long timeout, int nanos): Způsobí, že aktuální vlákno čeká, dokud jiné vlákno nevolá notify() nebo notifyAll() na tomto objektu nebo neuplyne stanovený čas. Může být voláno pouze v synchronizovaných blocích nebo metodách.
  • clone(): Vytvoří a vrátí kopii tohoto objektu. Vyžaduje implementaci rozhraní Cloneable.
  • finalize(): Je voláno garbage collectorem před odstraněním objektu. Nedoporučuje se používat kvůli nepředvídatelnosti.

Příklad přepsání metod equals() a hashCode():

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

Třída Object poskytuje základní mechanismy, které jsou nezbytné pro práci s objekty v jazyce Java, jako je porovnávání, hashování, synchronizace vláken a získávání informací o třídě.