Přejít na hlavní obsah

Použití instanceof a getClass v Javě: jaký je rozdíl?

V programování v Javě je často nutné zkontrolovat typ objektu, aby bylo možné provést příslušné kroky v závislosti na jeho třídě. K tomu lze použít příkaz instanceof nebo metodu getclass(). I když oba tyto přístupy umožňují zkontrolovat typ objektu, mají své vlastní rozdíly a lze je použít v různých situacích.

Příkaz instanceof je příkaz bulu, který kontroluje, zda je objekt instancí dané třídy nebo zda je jeho třída dědicem dané třídy. Pokud máme například objekt obj, můžeme použít příkaz instanceof ke kontrole, zda obj je instance třídy SomeClass:

if (obj instanceof SomeClass)

// spustit kód, pokud obj je instance SomeClass

Metoda getclass () je metoda dostupná každému objektu v Javě, která vrací odkaz na třídu, do které objekt patří. Například máme objekt obj a můžeme získat odkaz na jeho třídu pomocí metody getClass ():

Class objClass = obj.getClass();

Výsledný odkaz na třídu lze použít k ověření typu objektu, srovnání s jinými třídami a další.

Definice instanceof

Příklad použití příkazu instanceof :

public class Main if (obj2 instanceof Integer) >>

V tomto příkladu se příkaz instanceof používá ke kontrole, zda objekt obj1 je instance třídy String a objekt obj2 instance třídy Integer . V důsledku provádění programu se zobrazí zpráva "obj1 je instance třídy String"a" obj2 je instance třídy Integer".

Definice getClass

Příklad použití metody getclass() :

String str = "Пример строки";Class strClass = str.getClass();

V tomto příkladu bude proměnná strClass obsahovat objekt typu Class představující třídu String . Nyní je možné použít metody třídy Class k přístupu k informacím o třídě a její struktuře.

Metoda getClass () může být užitečná, když potřebujete zkontrolovat typ objektu nebo provést nějaké akce v závislosti na jeho třídě. Například:

Object obj = new String("Пример строки");if (obj.getClass() == String.class) else

V tomto příkladu porovnáváme třídu objektu získanou metodou getclass () se třídou String.class . Pokud jsou si rovni, objekt je řetězec. Jinak to není řetězec.

Rozdíl mezi použitím instanceof a getClass

Příkaz instanceof zkontroluje, zda je objekt instancí dané třídy nebo její podtřídy. Operátor vrátí logickou hodnotu true, pokud je objekt instancí dané třídy, a false jinak. Například:

Person person = new Person();if (person instanceof Person)

Metoda getClass () vrací objekt třídy, který poskytuje informace o typu objektu za běhu. Metoda getClass () může být povolána na jakýkoli objekt a vrátí třídu, do které objekt patří. Například:

Person person = new Person();Class classObject = person.getClass();System.out.println("The class of person object is: " + classObject.getName());

Jedním z rozdílů mezi instanceof a getclass() je, že instanceof kontroluje, zda je objekt instancí dané třídy nebo její podtřídy, zatímco getClass () vrací třídu, ke které objekt patří. To znamená, že instanceof lze použít ke kontrole typů dědičnosti, zatímco getClass() vrací konkrétní třídu, do které objekt patří, bez ohledu na jeho podtřídy.

Dalším rozdílem je, že instanceof lze použít ke kontrole dostupnosti rozhraní, zatímco getClass() to neumožňuje. Například:

Person person = new Person();if (person instanceof Serializable)

Současně getclass () neumožňuje takové použití:

Person person = new Person();Class classObject = person.getClass();// Нельзя проверить наличие интерфейсаif (classObject instanceof Serializable)