栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

scala 函数&方法、函数&方法的实现原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

scala 函数&方法、函数&方法的实现原理

文章目录
    • 1. 函数&方法
    • 2. 函数&方法的实现原理


1. 函数&方法

  scala中方法是类的一部分,而函数是一个对象,可以赋值给一个变量。scala 中的方法跟 Java 类似,方法是组成类的一部分。scala 中的函数则是一个完整的对象。类中的方法可以重载和重写,而函数没有重载和重写的概念,但是函数可嵌套使用


2. 函数&方法的实现原理

把上诉scala代码(main函数内部的嵌套函数test()、T10类的方法test())编译为java

public final class T10$ {
   public static T10$ MODULE$;

   static {
      new T10$();
   }

   public void main(final String[] args) {
      Function1 function = test$1(10);
      int i = function.apply$mcII$sp(20);
      this.test(5);
      .MODULE$.println(BoxesRunTime.boxToInteger(i));
   }

   public void test(final int i) {
      .MODULE$.println("test方法");
   }

   private static final int inner$1(final int j, final int i$1) {
      return i$1 + j;
   }

   private static final Function1 test$1(final int i) {
      return (j) -> {
         return inner$1(j, i);
      };
   }

   private T10$() {
      MODULE$ = this;
   }

   // $FF: synthetic method
   private static Object $deserializeLambda$(SerializedLambda var0) {
      return var0.lambdaDeserialize(var0);
   }
}

        //decompiled from T10.class
package com.cz.part5;

import scala.reflect.ScalaSignature;

@ScalaSignature(
   bytes = "u0006u0001U:Q!u0002u0004tu000251Qau0004u0004tu0002AAQaFu0001u0005u0002aAQ!Gu0001u0005u0002iAQALu0001u0005u0002=n1u0001Vu00191u0015t9u0001"Au0003qCJ$XGu0003u0002nu0015u0005u00111Mu001fu0006u0002u0017u0005u00191m\7u0004u0001Au0011a"Au0007u0002rtu0019A+ru0019u0014u0005u0005tu0002Cu0001nu0016u001bu0005u0019""u0001u000bu0002u000bMu001cu0017r\1nu0005Yu0019"AB!osJ+g-u0001u0004=S:LGOu0010u000bu0002u001bu0005!Q.Y5o)tYbu0004u0005u0002u00139%u0011Qdu0005u0002u0005+:LGu000fCu0003 u0007u0001u0007u0001%u0001u0003beu001eu001cbcu0001n"G%u0011!eu0005u0002u0006u0003Ju0014u0018-u001ftu0003I-r!!Ju0015u0011u0005u0019u001aR"Au0014u000bu0005!bu0011Au0002u001fs_>$h(u0003u0002+'u00051u0001K]3eKu001aL!u0001Lu0017u0003rM#(/u001b8hu0015tQ3#u0001u0003uKN$HCAu000e1u0011u0015tDu00011u00013u0003u0005Iu0007Cu0001n4u0013t!4CAu0002J]Ru0004"
)
public final class T10 {
   public static void test(final int i) {
      T10$.MODULE$.test(var0);
   }

   public static void main(final String[] args) {
      T10$.MODULE$.main(var0);
   }
}

可得到如下结论:

  (1)所谓的函数,就是在对象中生成私有的静态的final方法,并自动增加后缀


  (2)所谓的嵌套函数,实际上是2个独立的方法互相调用

  (3)所谓的方法,就是类中方法,无需进行任何改变

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号