首页 > 解决方案 > 泛型调用不同类中的方法,但具有相同的方法签名

问题描述

假设有两个类FooBar。它们不扩展同一个类(类除外Object)或实现同一个接口。但是,它们都有一个具有相同签名的方法。这些课程不是我的;它们不能改变。有没有办法使用某种通用的方法调用,meth就好像这两个类扩展了同一个类或实现了同一个接口?

class Foo {

    public void meth(String s) {
    }
}

class Bar {

    public void meth(String s) {
    }
}

标签: javagenerics

解决方案


在 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")


推荐阅读