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 パラメーターがある場合は、関数に送信する前に各クラスのインスタンスを作成する必要があります。これは避けたい。

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.getMethodsいずれにせよ public メソッドのみを返しますが、スーパークラスから継承されたものを返します。

于 2013-02-27T12:17:01.447 に答える
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());
      }
    }
    }
于 2013-02-27T12:17:38.013 に答える