3

我正在执行以下操作来建立 TestA 类的公共方法。

List<String> strings = new ArrayList<String>();
Method[] methods = TestA.class.getDeclaredMethods();
for(Method method : methods) 
{
  if(Modifier.isPublic(method.getModifiers())) 
  {         
    strings.add(method.getName());
  }
}

我还需要对等做同样的事情TestBTestC所以我想要一个函数,它接受一个类名并返回一个公共方法的字符串数组。我怎样才能做到这一点?

如果我有一个 Object 参数,我必须先创建每个 Class 的实例,然后再将它们发送到函数。我希望避免这种情况。

4

2 回答 2

7

听起来你想要:

public static List<String> getPublicDeclaredMethods(Class<?> clazz) {
    List<String> strings = new ArrayList<String>();
    Method[] methods = clazz.getDeclaredMethods();
    for(Method method : methods)  {
        if(Modifier.isPublic(method.getModifiers())) {
            strings.add(method.getName());
        }
    }
    return strings;
}

然后调用它:

List<String> names = getPublicDeclaredMethods(TestA.class);

您还应该考虑使用Class.getMethodswhich 无论如何只返回公共方法 - 但返回从超类继承的方法。

于 2013-02-27T12:17:01.447 回答
1

您可以将java.lang.Class实例传递给 self ,如下所示

 public void introspectClass(Class cls){
    List<String> strings = new ArrayList<String>();
    Method[] methods = cls.getDeclaredMethods();
    for(Method method : methods) 
    {
      if(Modifier.isPublic(method.getModifiers())) 
      {         
        strings.add(method.getName());
      }
    }
    }
于 2013-02-27T12:17:38.013 回答