SomeClass::func
can mean two things, depending on whether func
is a static method or an instance method.
(1) If func
is a static method, then SomeClass::func
is a lambda that just passes all the arguments to the method:
(a, b, c) -> SomeClass.func(a, b, c);
(2) If func
is an instance method, then SomeClass::func
is a lambda that uses the first argument as the instance, as you thought:
(a, b, c) -> a.func(b, c);
where a
has type SomeClass
.
EDIT: Sotirios' answer demonstrates yet a different type of method reference: example::method
where example
is a reference variable (instead of a class name). This means the same as
(a, b) -> example.method(a, b);
or perhaps more accurately
(a, b) -> __someFinalTemporary.method(a, b);
where __someFinalTemporary
is assigned to example
at the point where the method reference is evaluated, so that if example
changes later, the method is still called using the earlier value of example
.
[The fourth kind is SomeClass::new
which passes the arguments to a constructor. I think that's all of them.]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…