gpt4 book ai didi

Java反射,调用传入对象的类的方法

转载 作者:行者123 更新时间:2023-12-02 11:46:22 25 4
gpt4 key购买 nike

刚刚开始学习和了解java反射,希望对这个问题有任何帮助。

我正在尝试编写一个方法,它看起来像这样:

    private <T> void myMethod (List<T> testSub) {
testSub.forEach(s -> assertEquals(s.getSource(), "TEST"));
}

但是它显示了一个错误,因为 java 不知道 testSub 的类是否有 getSource() 这个方法,它希望我将 s.getSource() 转换为已知的类。

我想要的是以某种方式让java知道testSub类中的itemes有这个getSource()方法,并且它可以被调用并且可以安全地调用。

提前致谢!

----------------------------------------更新------------------ ----选择使用这种方式:

    private <T> void myMethod (List<T> testSub, Class<T> clazz) {

testSub.forEach(s -> assertEquals(clazz.getMethod("getSource").invok(s), "TEST"));
}

必须捕获异常但有效。

最佳答案

向类型变量定义添加绑定(bind):

private <T extends HasSource> void myMethod (List<T> testSub) {

其中 HasSource 定义 getSource() 方法:

public interface HasSource {
String getSource()
}

编译器会知道T实际上是HasSource的子类,因此它具有getSource()方法。

当然,要利用此解决方案,您需要使所有要用作 testSub 元素的类实现该 HasSource 接口(interface)。

关于Java反射,调用传入对象的类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com