Jawaban:
Gunakan Modifier.isStatic(method.getModifiers())
.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
Catatan: Metode ini sebenarnya berbahaya dari sudut pandang keamanan. Class.getMethods "bypass [es] Pemeriksaan SecurityManager bergantung pada pemuat kelas pemanggil langsung" (lihat bagian 6 dari pedoman pengodean aman Java).
Penafian: Tidak diuji atau bahkan dikompilasi.
Catatan Modifier
harus digunakan dengan hati-hati. Bendera yang direpresentasikan sebagai int bukanlah tipe aman. Kesalahan umum adalah menguji bendera pengubah pada tipe objek refleksi yang tidak diterapkan padanya. Ini mungkin kasus bahwa bendera di posisi yang sama diatur untuk menunjukkan beberapa informasi lain.
Anda bisa mendapatkan metode statis seperti ini:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
Untuk menyempurnakan jawaban sebelumnya (benar), berikut ini cuplikan kode lengkap yang melakukan apa yang Anda inginkan (pengecualian diabaikan):
public Method[] getStatics(Class<?> c) {
Method[] all = c.getDeclaredMethods()
List<Method> back = new ArrayList<Method>();
for (Method m : all) {
if (Modifier.isStatic(m.getModifiers())) {
back.add(m);
}
}
return back.toArray(new Method[back.size()]);
}