Scalaのtraitを解剖してみた

Scalaのtraitを解剖してみた

trait Trait {
 
    val value: String = s"$getOne"
 
    def getOne: Int = 1
 
    def getTwo: Int
 
}

これを jad すると

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Trait.scala
 
import scala.Predef$;
import scala.StringContext;
import scala.runtime.BoxesRunTime;
 
public abstract class Trait$class
{
 
    public static int getOne(Trait $this)
    {
        return 1;
    }
 
    public static void $init$(Trait $this)
    {
        $this.Trait$_setter_$value_$eq((new StringContext(Predef$.MODULE$.wrapRefArray((Object[])(new String[] {
            "", ""
        })))).s(Predef$.MODULE$.genericWrapArray(((Object) (new Object[] {
            BoxesRunTime.boxToInteger($this.getOne())
        })))));
    }
}
 
 
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Trait.scala
 
 
public interface Trait
{
 
    public abstract void Trait$_setter_$value_$eq(String s);
 
    public abstract String value();
 
    public abstract int getOne();
 
    public abstract int getTwo();
}

こうなりました

String Interpolationについては以下のスライドが詳しいです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください