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
。它们不扩展相同的类(除了
对象
类)或实现相同的接口。但是,它们都有一个具有相同签名的方法。这些课程不是我的;它们无法改变。有没有一种方法可以对method
meth
使用某种泛型调用,就好像这两个类扩展了相同的类或实现了相同的接口一样

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好的。我改变了答案。