합니까 코 틀린 생성 된 바이트 코드는 메소드 수에 영향을 줍니까?

멜 :

예를 들어, I 사용

methodReference = ::method

보다는

methodReference = { method(it) }

포함 디 컴파일 코드 getOwner, getName, getSignature로 인해 반사 자바 코드의 방법. 이러한 방법은 64K 제한에 대해 계산합니까?

유진 페트 렌코 :

그들이 난독 화에 의해 제거되지 않는 경우에만 방법, 계산됩니다 / R8

  fun method(t : Any) {}
  val reference1: KFunction1<Any, Unit> = ::method
  val reference2: (Any) -> Unit = { method(it) }

를 들어 reference1(자바 디 컴파일) 바이트 코드가 될 것이다 :

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

람다 (또는 REFERENCE2)에 상응하는 자바 코드 :

   @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)

추천

출처http://43.154.161.224:23101/article/api/json?id=187704&siteId=1