将类作为参数传递给方法

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等做同样的事情,所以我想要一个函数,它接受一个类名并返回一个公共方法的字符串数组。我该如何做呢?
如果我有一个对象参数,那么在将它们发送到函数之前,我必须创建每个类的实例。我希望避免这种情况。

2
你可以把 Class 作为方法的参数。 - Harry Joy
你可以将 java.lang.Class 对象作为方法参数传递。 - Ian Roberts
你是否也需要从你的类的超类中继承公共方法? - Adam Arold
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.getMethods,它只返回公共方法 - 但是返回从超类继承的方法。

你认为 <?> 是必要的吗?我猜我们可以省略它,直接写 Class。这样有什么区别吗? - Harry Joy
@HarryJoy:是的 - Class 是一个原始类型,会导致编译时警告。Class<?> 是使用通配符的泛型类型,没有任何警告是可以的。 - Jon Skeet

1
您可以像下面显示的那样传递java.lang.Class实例本身。
 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());
      }
    }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接