Programmering

Dynamisk påkalle en statisk metode uten referanse (6. juli 1999)

Spørsmål: Hvordan kan jeg påkalle en statisk metode dynamisk uten en forekomstreferanse? Method.invoke (Object obj, Object [] parms) trenger en konkret forekomst, men jeg vil kalle den statiske metoden direkte på et Class-objekt! Er dette mulig i Java?

Løsningen er å lage en forekomst dynamisk med newInstance () og ring påkalle med den forekomsten, men dette vil ikke fungere hvis klassen ikke har en tom konstruktør. Og jeg vil ikke lage forekomster jeg virkelig ikke trenger!

EN: I følge JDK API-dokumentasjonen for Method.invoke (Object obj, Object [] args), "Hvis den underliggende metoden er statisk, er den angitte obj argument ignoreres. Det kan være null. "Så, i stedet for å sende inn et faktisk objekt, kan en null sendes. Derfor kan en statisk metode påberopes uten en faktisk forekomst av klassen.

Følgende eksempelprogram tester dette faktum og produserer korrekt utdataene nedenfor. En konkret forekomst av klasse Foo blir aldri skapt.

importer java.lang.reflect. *; public class Test {public static void main (String [] args) {try {Class c = Class.forName ("Foo"); System.out.println ("Lastet klasse:" + c); Metode m = c.getDeclaredMethod ("getNum", null); System.out.println ("Fikk metode:" + m); Objekt o = m.invoke (null, null); System.out.println ("Output:" + o); } fange (Unntak e) {e.printStackTrace (); }}} klasse Foo {offentlig statisk int getNum () {retur 5; }} 

Programutgang:

Lastet klasse: klasse Foo Got-metode: offentlig statisk int Foo.getNum () Utgang: 5 
Random Walk Computing er den største Java / CORBA-konsulentbutikken i New York, med fokus på løsninger for finansforetaket. Random Walk-konsulenter er kjent for sin ledende Java-ekspertise, og publiserer og snakker om Java i noen av de mest respekterte forumene i verden.

Denne historien, "Dynamically invoking a static method without instance reference (6. juli 1999)" ble opprinnelig utgitt av JavaWorld.

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