metoda getClass(), obiekt klasy, wprowadzenie do Reflection - 1

Witaj Amigo!

A teraz najciekawsze. Zapoznamy się z klasą Class i trochę z Reflection.
Jak zapewne już zrozumiałeś, wszystko w Javie jest obiektem. Co jest wymagane dla obiektu? Co ma w sobie każdy przedmiot i co stanowi o jego istocie?

- Klasa przedmiotowa!

- Prawidłowy! Dobrze zrobiony. Każdy obiekt ma klasę. Ale wracając do przedmiotów. Niektóre obiekty całkowicie zawierają jakąś jednostkę, podczas gdy inne po prostu pomagają nią zarządzać.

Te ostatnie obejmują FileOutputStream lub Thread . Podczas tworzenia obiektu Thread nie jest tworzony żaden nowy wątek. Jest tworzony przez maszynę Java po wywołaniu metody start(). Ten obiekt po prostu pomaga kontrolować proces.

To samo dotyczy FileOutputStream : plik jest przechowywany na dysku, a system operacyjny kontroluje jego przechowywanie i dostęp do niego. Ale możemy z nim wchodzić w interakcje za pośrednictwem obiektów typu Plik, ponownie za pomocą maszyny Java.

Tak, to już zrozumiałem.

- Tak więc do interakcji z klasami jest specjalna klasa i nazywa się - Klasa.

Nie trudno było się domyślić.

- Tak. Za każdym razem, gdy maszyna Java ładuje do pamięci nową klasę, tworzy obiekt typu Class, za pomocą którego można uzyskać informacje o załadowanej klasie.

Z każdą klasą i obiektem związany jest „ obiekt klasy ” .

Przykład Opis
Class clazz = Integer.class;
Pobieranie „obiektu klasy” z klasy Integer.
Class clazz = int.class;
Uzyskanie „obiektu klasy” z klasy int.
Class clazz = "123".getClass();
Uzyskanie „obiektu klasy” z obiektu typu String.
Class clazz = new Object().getClass();
Uzyskanie „obiektu klasy” z obiektu typu Object.

- Wow, jakie to ciekawe.

Dlaczego piszesz clazz a nie class?

- Czy pamiętasz, że słowo class jest słowem kluczowym w Javie i nie możesz go używać do nazywania zmiennych?

— Tak, wiem, wiem. Po prostu zapomniałem.

— Czy używałeś już gdzieś obiektu Class?

— Tak, używaliśmy go, kiedy pisaliśmy własną implementację metody równości.

- Tak, możesz porównać, czy obiekty mają te same klasy, jeśli użyjesz metody getClass().

Co można zrobić z tym obiektem?

- Cóż, wiele rzeczy:

Kod Javy Opis
Class s = int.class;
String name = s.getName();
Pobierz nazwę klasy.
Class s = Class.forName("java.lang.String");
Pobierz klasę według nazwy.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Porównaj klasy obiektów.

Ciekawe, ale nie tak fajne, jak myślałem.

- Chcesz, żeby było fajnie? Jest też Odbicie . Odbicie jest bardzo fajne.

— Co to jest refleksja ?

- Refleksja to zdolność klasy do uzyskania informacji o sobie. Java ma specjalne klasy: Pole to pole, Metoda to metoda, podobnie jak Klasa dla klas. Ponieważ obiekt typu Class umożliwia uzyskanie informacji o klasie, wówczas obiekt typu Field dostarcza informacji o „polu klasy”, a Metoda zawiera informacje o „metodzie klasy”. A oto, co możesz z nimi zrobić:

Kod Javy Opis
Class[] interfaces = List.class.getInterfaces();
Otrzymujemy listę „obiektów klasy” dla interfejsów klasy List
Class parent = String.class.getSuperclass();
Pobierz „obiekt klasy” klasy nadrzędnej dla klasy String
Method[] methods = List.class.getMethods();
Otrzymujemy listę metod, które posiada klasa List
String s = String.class.newInstance();
Utwórz nowy obiekt klasy String
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s);
Pobierz metodę length klasy String, wywołaj ją na łańcuchu s

- Wow! To jest naprawdę fajne!

- Cieszę się, że to lubisz.