2008-11-13 17 views

cevap

155

Modifier.isStatic(method.getModifiers())'u kullanın.

/** 
* 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 "bypass [es] SecurityManager, anında arayanın sınıf yükleyicisine bağlı olarak kontrol eder" (Java güvenli kodlama yönergelerinin 6. bölümüne bakın).

Yasal Uyarı: Test edilmemiş ve hatta derleyici değildir.

Not Modifier Dikkatli kullanılmalıdır. Ints olarak gösterilen bayraklar güvenli değildir. Yaygın bir hata, bir değiştirici bayrağının, uygulanmadığı bir yansıma nesnesi türü üzerinde test edilmesidir. Aynı konumda bulunan bir bayrak, diğer bazı bilgileri göstermek üzere ayarlanmış olabilir. önceki (doğru) cevabı eti dışarı için

+0

Yanıtı düzenleyin: Değiştirici yerine ModifierS -> Use Modifier.isStatic (method.getModifiers()) Yanıt için Thx! – Telcontar

+4

Yup, teşekkürler. Her ne kadar ben bir yanlış tasarım olduğunu iddia etsem de. Değiştirici bir değiştiriciyi temsil etmemektedir. Ama sonra bütün sınıf bir yanlış tasarımdır. Ve muhtemelen de yansıma. –

+0

btw aynı zamanda bir getModifiers() yöntemi de sağlayan Fields için de çalışır – Gregor

6

, burada (ihmal istisnalar) istediğimizi yapar ki tam bir kod parçacığı geçerli:

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()]); 
} 
13

Böyle statik yöntemleri alabilirsiniz:

for (Method m : MyClass.class.getMethods()) { 
    if (Modifier.isStatic(m.getModifiers())) 
     System.out.println("Static Method: " + m.getName()); 
} 
İlgili konular