美文网首页
Scala的trait

Scala的trait

作者: 真老根儿 | 来源:发表于2018-07-23 20:40 被阅读0次

    今天看一下scala的trait,用法不讲,就看一下编译再反编译的源码
    定义一个trait

    trait TraitDemo {
      def say(): Unit
    }
    

    使用javac命令编译这个文件

    scalac TraitDemo.scala
    

    得到一个TraitDemo.clss,我们再使用javap命令反编译这个class文件看一下

    # javap TraitDemo.class
    
    Compiled from "TraitDemo.scala"
    public interface com.study.TraitDemo {
      public abstract void say();
    }
    

    一目了然,trait类型经过编译后变成了接口,而say()被编译成为了abstract方法。
    如果我们把def say(): Unit方法实现,改为say(): Unit = {},看反编译之后的代码

    Compiled from "TraitDemo.scala"
    public abstract class com.study.TraitDemo$class {
      public static void say(com.study.TraitDemo);
      public static void $init$(com.study.TraitDemo);
    }
    

    这时候trait就变成了一个抽象类,而实现的方法变成了static级别的。

    看到上面的编译结果,我们就可以想到scala中,定义不同的trait,实现不同的功能,当我们需要某一个功能的时候可以直接with进来,比如成为便捷的工具类。

    相关文章

      网友评论

          本文标题:Scala的trait

          本文链接:https://www.haomeiwen.com/subject/lwqsmftx.html