Java 泛型调用不同类中的方法,但方法签名相同
假设有两个类Java 泛型调用不同类中的方法,但方法签名相同,java,generics,Java,Generics,假设有两个类Foo和Bar。它们不扩展相同的类(除了对象类)或实现相同的接口。但是,它们都有一个具有相同签名的方法。这些课程不是我的;它们无法改变。有没有一种方法可以对methodmeth使用某种泛型调用,就好像这两个类扩展了相同的类或实现了相同的接口一样 class Foo { public void meth(String s) { } } class Bar { public void meth(String s) { } } 在Java8或更高版本
Foo
和Bar
。它们不扩展相同的类(除了对象
类)或实现相同的接口。但是,它们都有一个具有相同签名的方法。这些课程不是我的;它们无法改变。有没有一种方法可以对methodmeth
使用某种泛型调用,就好像这两个类扩展了相同的类或实现了相同的接口一样
class Foo {
public void meth(String s) {
}
}
class Bar {
public void meth(String s) {
}
}
在Java8或更高版本中,可以使用方法引用
Foo myFoo = ...;
Bar myBar = ...;
Consumer<String> fn1 = myFoo::meth;
Consumer<String> fn2 = myBar::meth;
foomyfoo=。。。;
Bar myBar=。。。;
消费者fn1=myFoo::meth;
消费者fn2=myBar::meth;
将相应的使用者
传递到要调用方法的位置
使用者
适用于具有一个字符串参数且无返回类型的方法。如果您的方法签名不同,那么有许多其他功能接口可能更匹配
给定
使用者fn
,您可以使用调用引用的方法。您可以使用反射,但不能使用类型安全。根据对象运行时,您可以调用特定的方法
import java.lang.reflect.Method;
try
{
Object f1 = new Foo();
Object f2 = new Bar();
Class c1 = f1.getClass();
Class[] param = new Class[1];
param[0] = String.class;
Method method;
method = c1.getDeclaredMethod("meth", param);
method.invoke(f1, "$$$$$$$$$$$$$$");
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这些方法接受一个参数并返回void。你能描述一下如何处理这种情况吗?@menteith好的。我改变了答案。