Yanıtlar:
Kullanın 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);
}
Not: Bu yöntem aslında güvenlik açısından tehlikelidir. Class.getMethods "SecurityManager kontrollerini anında arayanın sınıf yükleyicisine bağlı olarak atlar" (Java güvenli kodlama kılavuzunun 6. bölümüne bakın).
Sorumluluk Reddi: Test edilmedi veya derlenmedi.
Dikkatli Modifier
kullanılmalıdır. İnts olarak temsil edilen bayraklar tür güvenli değildir. Yaygın bir hata, bir değiştirici bayrağı, uygulanmadığı bir yansıma nesnesi türü üzerinde test etmektir. Aynı pozisyondaki bir bayrağın bazı diğer bilgileri belirtmek için ayarlanması durumu olabilir.
Statik yöntemleri şu şekilde alabilirsiniz:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
Önceki (doğru) yanıtı ortaya çıkarmak için, burada istediğiniz şeyi yapan tam bir kod pasajı verilmiştir (istisnalar göz ardı edilir):
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()]);
}