Memanggil secara dinamis metode statis tanpa referensi contoh (6 Juli 1999)

T: Bagaimana cara memanggil metode statis secara dinamis tanpa referensi instans? Method.invoke (Object obj, Object [] parms) membutuhkan contoh konkret, tetapi saya ingin memanggil metode statis langsung pada objek Kelas! Apakah ini mungkin di Jawa?

Solusinya adalah membuat instance secara dinamis dengan newInstance()dan memanggil invokedengan instance itu, tetapi ini tidak akan berfungsi jika kelas tidak memiliki konstruktor kosong. Dan saya tidak ingin membuat contoh yang sebenarnya tidak saya butuhkan!

J: Menurut dokumentasi JDK API untuk Method.invoke(Object obj, Object[] args), "Jika metode yang mendasarinya statis, maka objargumen yang ditentukan diabaikan. Mungkin nol." Jadi, alih-alih mengirimkan objek yang sebenarnya, null mungkin akan diteruskan; oleh karena itu, metode statis dapat dipanggil tanpa instance kelas yang sebenarnya.

Program contoh berikut menguji fakta ini, dan menghasilkan keluaran di bawah dengan benar. Contoh konkret kelas Footidak pernah dibuat.

import java.lang.reflect. *; Uji kelas publik {public static void main (String [] args) {coba {Kelas c = Class.forName ("Foo"); System.out.println ("Kelas yang dimuat:" + c); Metode m = c.getDeclaredMethod ("getNum", null); System.out.println ("Metode Punya:" + m); Objek o = m.invoke (null, null); System.out.println ("Keluaran:" + o); } catch (Exception e) {e.printStackTrace (); }}} kelas Foo {public static int getNum () {return 5; }}

Keluaran program:

Kelas dimuat: kelas Foo Got metode: public static int Foo.getNum () Output: 5 
Random Walk Computing adalah butik konsultasi Java / CORBA terbesar di New York, yang berfokus pada solusi untuk perusahaan keuangan. Dikenal karena keahlian Java mereka yang terdepan, konsultan Random Walk menerbitkan dan berbicara tentang Java di beberapa forum yang paling dihormati di dunia.

Cerita ini, "Secara dinamis menggunakan metode statis tanpa referensi contoh (6 Juli 1999)" pada awalnya diterbitkan oleh JavaWorld.