Eu quero descobrir em tempo de execução SOMENTE os métodos estáticos de uma classe, como posso fazer isso? Ou como diferenciar entre métodos estáticos e não estáticos.
fonte
Eu quero descobrir em tempo de execução SOMENTE os métodos estáticos de uma classe, como posso fazer isso? Ou como diferenciar entre métodos estáticos e não estáticos.
Use 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);
}
Nota: Este método é realmente perigoso do ponto de vista de segurança. Class.getMethods "bypass [es] SecurityManager verifica dependendo do carregador de classe do chamador imediato" (consulte a seção 6 das diretrizes de codificação segura Java).
Isenção de responsabilidade: não testado ou mesmo compilado.
Nota Modifier
deve ser usada com cuidado. Sinalizadores representados como ints não são seguros para o tipo. Um erro comum é testar um sinalizador de modificador em um tipo de objeto de reflexão ao qual ele não se aplica. Pode ser que um sinalizador na mesma posição seja definido para denotar alguma outra informação.
Você pode obter os métodos estáticos como este:
fonte
Para completar a resposta anterior (correta), aqui está um trecho de código completo que faz o que você deseja (exceções ignoradas):
fonte