getMethods Reflection API结果与接口

时间:2015-07-29 12:31:54

标签: java reflection interface

请查看该方案,并建议如何删除以下问题。

  1. 我们有一个接口 BaseRepository ,它已经构建了一个方法commitData(),retrieveData(),sortByLength()。

     public interface BaseRepository{
           public void commitData();
           public Object retrieveData();
           public Object sortByLength();
        }

  2. 接口 FileRepository 扩展 BaseRepository ,其方法为commitData(),fileNames(),即

    public interface FileRepository extends BaseRepository{
                public void commitData();
                public List fileNames();
            }

  3. 界面 ObjectRepository ,它扩展了 BaseRepository FileRepository ,但没有任何方法。

  4. 使用Java Reflection API我尝试在接口中定义方法以进行进一步处理,但是获取方法commitData 2次,即在代码片段之后将在控制台中给出2次commitData

    for(Method method : ObjectRepository.class.getMethods()){
                System.out.println(method.getName());
            }
  5. 输出是:

      

    commitData retrieveData sortByLength commitData fileNames

    我正在使用Java 1.6。

1 个答案:

答案 0 :(得分:0)

您可以使用Method::getDeclaringClass()来区分它们。

for(Method method : ObjectRepository.class.getMethods()){
        System.out.println(method.getDeclaringClass() + " " + method.getName());
}

请参阅http://ideone.com/y3Djvf