java - 如何在Java中使用通用接口(interface)获取实现类中的方法

标签 java generics reflection interface

我有一个通用接口(interface)和一个实现它的类:

import java.util.Arrays;

interface Interface<T> {
    void doSomething(T element);
}

class StringImpl implements Interface<String> {
    @Override
    public void doSomething(String element) {
        System.out.println("StringImpl: doSomething");
    }
}

public class Main {
    public static void main(String... args) {
        System.out.println(Arrays.toString(StringImpl.class.getDeclaredMethods()));
    }
}

结果是

[public void com.ra.StringImpl.doSomething(java.lang.String), 
public void com.ra.StringImpl.doSomething(java.lang.Object)]

但实际上,我只想要实现版本:

public void com.ra.StringImpl.doSomething(java.lang.String)

有什么方便的方法可以实现吗?

最佳答案

过滤掉bridge methods :

Method[] methods = Arrays.stream(StringImpl.class.getDeclaredMethods())
                         .filter(m -> !m.isBridge())
                         .toArray(Method[]::new);

关于java - 如何在Java中使用通用接口(interface)获取实现类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332314/

相关文章:

java - 在 AEM 的 Servlet 中获取 JSP 输出

Java TreeSet 不接受已经实现类似功能的客户对象

c# - 如何部分指定泛型方法类型参数

Java 反射 getDeclaredMethod(...) 返回 Null

java - 理解 [[某些 Java 源代码中引用的 I.class

java - 查找文件夹列表中的最后一个文件夹

java - 在当前时间停止秒表

generics - 是否可以从参数函数推导出函数返回类型?

Java不允许调用泛型类型的递归方法?

java - 为什么 java.io.FileSystem 是包私有(private)的?