Programovanie

Dynamické vyvolanie statickej metódy bez odkazu na inštanciu (6. júla 1999)

Otázka: Ako môžem dynamicky vyvolať statickú metódu bez odkazu na inštanciu? Method.invoke (Object obj, Object [] parms) potrebuje konkrétnu inštanciu, ale chcem zavolať statickú metódu priamo na objekt triedy! Je to možné v Jave?

Riešením je dynamické vytvorenie inštancie pomocou newInstance () a zavolaj vzývať s touto inštanciou, ale nebude to fungovať, ak trieda nemá prázdny konštruktor. A nechcem vytvárať inštancie, ktoré naozaj nepotrebujem!

A: Podľa dokumentácie JDK API pre Method.invoke (Object obj, Object [] args)"Ak je podkladová metóda statická, potom je zadaná obj argument je ignorovaný. Môže to mať hodnotu null. “Takže namiesto zadania skutočného objektu môže byť zadaná hodnota null; preto je možné vyvolať statickú metódu bez skutočnej inštancie triedy.

Nasledujúci ukážkový program testuje túto skutočnosť a správne vytvára výstup uvedený nižšie. Konkrétna inštancia triedy Foo nikdy nevzniká.

import java.lang.reflect. *; public class Test {public static void main (String [] args) {try {Class c = Class.forName ("Foo"); System.out.println ("Načítaná trieda:" + c); Metóda m = c.getDeclaredMethod ("getNum", null); System.out.println ("Mám metódu:" + m); Objekt o = m.invoke (null, null); System.out.println ("Výstup:" + o); } catch (Výnimka e) {e.printStackTrace (); }}} trieda Foo {public static int getNum () {návrat 5; }} 

Výstup programu:

Načítaná trieda: trieda Foo Metóda: public static int Foo.getNum () Výstup: 5 
Random Walk Computing je najväčší konzultačný butik Java / CORBA v New Yorku so zameraním na riešenia pre finančné podniky. Konzultanti Random Walk, známi svojimi špičkovými odbornými znalosťami jazyka Java, publikujú a hovoria o jazyku Java na niektorých z najuznávanejších fór na svete.

Tento príbeh „Dynamické vyvolanie statickej metódy bez odkazu na inštanciu (6. júla 1999)“ bol pôvodne publikovaný spoločnosťou JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found