说有两个类Foo
和Bar
。它们不扩展相同的类(Object
类除外)或实现相同的接口。但是,它们两者都具有具有相同签名的方法。这些课程不是我的。它们无法更改。有没有一种方法可以对方法meth
使用某种通用调用,就像这两个类扩展了同一类或实现了相同的接口一样?
class Foo {
public void meth(String s) {
}
}
class Bar {
public void meth(String s) {
}
}
答案 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);