代码之家  ›  专栏  ›  技术社区  ›  Alex R

反省“::”双冒号符号中的方法引用?[复制]

  •  0
  • Alex R  · 技术社区  · 6 年前

    class A {
       public void foo();
    }
    

    一个函数可以用另一个类来写。。。

    public String getMethodName(Function<?> func) { ... }
    

    String val = getMethodName(A::foo);
    

    在本例中,将以字符串形式返回方法的名称 "foo" ?

    1 回复  |  直到 6 年前
        1
  •  0
  •   talex    6 年前

    只有通过字节码反编译才有可能,因为

    foo(Baz::bar)
    

    是语法上的糖吗

    class SomeFakeName implement Interface {
       public void methodName() {
            Baz.bar();
       }
    }
    
    foo(new SomeFakeName())
    

    void foo(Interface p){}
    interface Interface {
        void methodName();
    }