代码之家  ›  专栏  ›  技术社区  ›  menteith

泛型在不同的类中调用一个方法,但使用相同的方法签名

  •  2
  • menteith  · 技术社区  · 6 年前

    假设有两个班 Foo Bar .它们不扩展同一类(除了 Object meth 好像这两个类扩展了相同的类或者实现了相同的接口?

    class Foo {
    
        public void meth(String s) {
        }
    }
    
    class Bar {
    
        public void meth(String s) {
        }
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Swapnil Bret Hogg    6 年前

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

    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();
        }
    
        2
  •  1
  •   khelwood Muhammed Elsayed.radwan    6 年前

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

    Consumer<String>

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

    Consumer<String> fn ,可以使用 fn.accept("abc")