Методы подсчитываются, только если они не удаляются proguard / R8
Пример
fun method(t : Any) {}
val reference1: KFunction1<Any, Unit> = ::method
val reference2: (Any) -> Unit = { method(it) }
Для reference1
байт-код (декомпилированный в Java) будет:
@NotNull
final KFunction reference1 = new Function1((X)this) {
// $FF: synthetic method
// $FF: bridge method
public Object invoke(Object var1) {.. }
public final void invoke(@NotNull Object p1) {..}
public final KDeclarationContainer getOwner() {..}
public final String getName() {..}
public final String getSignature() {..}
};
для лямбды (или ссылки2) эквивалентный код Java:
@NotNull
final Function1 reference2 = (Function1)(new Function1() {
// $FF: synthetic method
// $FF: bridge method
public Object invoke(Object var1) {..}
public final void invoke(@NotNull Object it) {..}
});
Таким образом, разница составляет 4 +1 для ссылки на метод и 1 +1 для лямбды, где +1
исходит из метода моста invoke(t:Any)