2013-02-27 143 views
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等,所以我想有一个函数,它接受一个类名和返回的公共方法的String数组。我怎样才能做到这一点?

如果我有一个Object参数,我将不得不创建每个类的实例,然后再将它们发送给函数。我希望避免这种情况。

+2

仅供参考,你可以有一个['Class'](http://docs.oracle.com/javase/7/docs/api/ java/lang/Class.html)作为方法的参数。 – 2013-02-27 12:16:41

+0

您可以将'java.lang.Class'对象作为参数传递给方法。 – 2013-02-27 12:17:09

+0

您是否需要班级超类的公共方法? – 2013-02-27 12:21:14

回答

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只反正返回public方法 - 但返回从超继承的。

+0

你觉得''是必要的吗?我想我们可以忽略它,只能写'Class'。它有什么区别? – 2013-02-27 12:20:45

+0

@HarryJoy:是 - 'Class'是一个原始类型,它会导致编译时警告。 '类'是一个使用通配符的通用类型,没有任何警告就没有问题。 – 2013-02-27 12:45:50

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