通用调用不同类中的方法,但具有相同的方法签名

时间:2018-06-26 09:24:30

标签: java generics

说有两个类FooBar。它们不扩展相同的类(Object类除外)或实现相同的接口。但是,它们两者都具有具有相同签名的方法。这些课程不是我的。它们无法更改。有没有一种方法可以对方法meth使用某种通用调用,就像这两个类扩展了同一类或实现了相同的接口一样?

class Foo {

    public void meth(String s) {
    }
}

class Bar {

    public void meth(String s) {
    }
}

2 个答案:

答案 0 :(得分:1)

在Java 8或更高版本中,您可以使用方法引用。

Foo myFoo = ...;
Bar myBar = ...;

Consumer<String> fn1 = myFoo::meth;
Consumer<String> fn2 = myBar::meth;

将适当的Consumer<String>传递到要调用该方法的位置。

Consumer<String>适用于具有一个字符串参数且没有返回类型的方法。如果您的方法签名不同,那么还有很多其他功能接口可能会更好地匹配。

给出一个Consumer<String> fn,您可以使用fn.accept("abc")调用引用的方法。

答案 1 :(得分:1)

您可以使用反射,但不能输入安全。根据对象的运行时间,您可以调用特定的方法。

$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND age NOT IN ($rrt) GROUP BY name ");
$select -> execute($ees);