java - 泛型调用不同类中的方法,但具有相同的方法签名
问题描述
假设有两个类Foo
和Bar
。它们不扩展同一个类(类除外Object
)或实现同一个接口。但是,它们都有一个具有相同签名的方法。这些课程不是我的;它们不能改变。有没有办法使用某种通用的方法调用,meth
就好像这两个类扩展了同一个类或实现了同一个接口?
class Foo {
public void meth(String s) {
}
}
class Bar {
public void meth(String s) {
}
}
解决方案
在 Java 8 或更高版本中,您可以使用方法引用。
Foo myFoo = ...;
Bar myBar = ...;
Consumer<String> fn1 = myFoo::meth;
Consumer<String> fn2 = myBar::meth;
将适当Consumer<String>
的传递到您希望调用该方法的位置。
Consumer<String>
适用于具有一个字符串参数且没有返回类型的方法。如果您的方法签名不同,那么还有许多其他功能接口可能会更好地匹配。
给定 a Consumer<String> fn
,您可以使用 调用引用的方法fn.accept("abc")
。
推荐阅读
- sql - 在父表上存储 1:N 关系中的特定列
- ios - 有没有办法将动态框架放入 iOS 中的另一个框架中?
- c# - 当X轴上的条数达到一定数量时,如何删除WinForms图表中的初始条?
- firebase - Firebase 数据库防止删除节点
- javascript - 如何在 React-Table 中将选定的多行分组?
- latex - 在乳胶的表格中编写多行的替代方法?
- shopify - 如果在 shopify 中变体数量少于两个,则显示变体标题
- matlab - 表中值类的表示
- keras - ValueError: 层 conv2d 的输入 0 与层不兼容
- javascript - 如何限制显示的子弹数量 swiperjs