Ang getClass() method, ang Class object, at isang panimula sa Reflection - 1

"Hi, Amigo!"

"Ngayon ay oras na para sa pangunahing kaganapan. Makikilala natin ang klase ng Klase at hawakan ang Reflection.
Tulad ng malamang na natanto mo na, lahat ng bagay sa Java ay isang bagay. At ano ang kailangan ng isang bagay? Ano ang mayroon ang bawat bagay na tumutukoy tungkol saan ang lahat?"

"Klase!"

"Tama! Magaling. Ang bawat bagay ay may klase. Ngunit ang pagbabalik sa mga bagay... Ang ilang mga bagay ay ganap na naglalaman ng isang entity, habang ang iba ay tumutulong lamang na pamahalaan ito."

"Kabilang sa huling uri na ito ang FileOutputStream at Thread . Kapag gumawa ka ng Thread object, hindi nagagawa ang bagong thread. Ang thread ay nilikha ng Java virtual machine pagkatapos tawagin ang start() na paraan. Tumutulong lang ang object na ito na pamahalaan ang proseso."

"Kapareho ng FileOutputStream : ang file ay naka-imbak sa disk, at ang OS ay namamahala sa imbakan at pag-access. Ngunit maaari naming makipag-ugnayan dito sa pamamagitan ng File object, muli sa tulong ng Java virtual machine."

"Oo, naiintindihan ko na."

"So, may espesyal na klase na tinatawag na Class para sa pakikipag-ugnayan sa mga klase."

"Hindi iyon mahirap hulaan."

"Oo. Sa tuwing naglo-load ang Java virtual machine ng bagong klase sa memorya, lumilikha ito ng Class object, na magagamit mo para makakuha ng partikular na impormasyon tungkol sa na-load na klase."

"Ang bawat klase at object ay nauugnay sa isang « Class object »."

Halimbawa Paglalarawan
Class clazz = Integer.class;
Nakukuha ang Class object ng Integer class.
Class clazz = int.class;
Nakukuha ang Class object ng int class.
Class clazz = "123".getClass();
Nakakakuha ng object ng Class ng String object.
Class clazz = new Object().getClass();
Nakukuha ang object ng Class ng object ng object.

"Wow! How interesting!"

"Naaalala mo ba na ang word class ay isang keyword sa Java at hindi maaaring gamitin bilang variable na pangalan?"

"Oh yeah, I know, I know. Nakalimutan ko lang."

"Nagamit mo na ba ang Class object sa isang lugar?"

"Oo, ginamit namin ito noong isinulat namin ang aming sariling pagpapatupad ng equals method."

"Oo, maaari mong gamitin ang getClass() na paraan upang subukan kung ang mga bagay ay may parehong klase."

"At ano ang maaari mong gawin sa bagay na ito?"

"Well, maraming bagay:"

Java code Paglalarawan
Class s = int.class;
String name = s.getName();
Nakukuha ang pangalan ng klase.
Class s = Class.forName("java.lang.String");
Nakakakuha ng klase ayon sa pangalan.
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
Inihahambing ang mga klase ng mga bagay.

"Kawili-wili, ngunit hindi kasing cool ng naisip ko."

"You want it to be cool? Meron ding Reflection .  Super cool ang Reflection ."

"Ano ang Reflection ?"

" Ang Reflection ay ang kakayahan ng isang klase na makakuha ng impormasyon tungkol sa sarili nito. Ang Java ay may mga espesyal na klase:  Field at Method , na katulad ng Class class para sa mga klase. Kung paanong hinahayaan ka ng Class object na makakuha ng impormasyon tungkol sa isang klase, ang Field object ay nagbibigay ng impormasyon tungkol sa isang field , at ang Method object ay nagbibigay ng impormasyon tungkol sa isang paraan. At tingnan kung ano ang maaari mong gawin sa kanila:"

Java code Paglalarawan
Class[] interfaces = List.class.getInterfaces();
Nakakakuha ng listahan ng mga bagay ng Klase para sa mga interface ng klase ng Listahan
Class parent = String.class.getSuperclass();
Nakukuha ang Class object ng parent class ng String class
Method[] methods = List.class.getMethods();
Nakakakuha ng listahan ng mga pamamaraan ng klase ng Listahan
String s = String.class.newInstance();
Lumilikha ng bagong String
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
Nakukuha ang paraan ng haba ng klase ng String at tinawag ito sa String s

"Wow! Ang galing talaga!"