java - 泛型调用不同类中的方法,但具有相同的方法签名

标签 java generics

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

class Foo {

    public void meth(String s) {
    }
}

class Bar {

    public void meth(String s) {
    }
}

最佳答案

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

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();
    }

关于java - 泛型调用不同类中的方法,但具有相同的方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039337/

相关文章:

java - 在 Java 中通过 XML 标签分割字符串

java - 将数组添加到 List<String[]> 时出错

java - 尝试理解单词边界

Java泛型问号和继承

java - Swing Jlabel 不显示

java - 为什么这些接口(interface)类型的变量不用于实例化新对象?

C# 具有相似类的泛型

java.util.Optional 和 java.lang.Class - 奇怪的行为

c# - 泛型仅支持引用转换,不支持装箱转换

C++:使用用户定义的泛型函数