MYSTERRIA3.0

Scala, указание типов и константы

Задача: получить константу, которую можно использовать в значениях аннотаций.

Исходный код Scala:

object Test {
  private final val Prefix = "lioqu."

  final val Http_Host = Prefix + "http.host"
  final val Http_Port: String = Prefix + "http.port"
}

Байткод Java:

$ javap -c -p 'Test$'
Compiled from "Test.scala"
public final class Test$ {
  public static final Test$ MODULE$;

  private final java.lang.String Prefix;

  private final java.lang.String Http_Host;

  private final java.lang.String Http_Port;

  public static {};
    Code:
       0: new           #2                  // class Test$
       3: invokespecial #12                 // Method "<init>":()V
       6: return

  private final java.lang.String Prefix();
    Code:
       0: ldc           #19                 // String lioqu.
       2: areturn

  public final java.lang.String Http_Host();
    Code:
       0: ldc           #22                 // String lioqu.http.host
       2: areturn

  public final java.lang.String Http_Port();
    Code:
       0: aload_0
       1: getfield      #24                 // Field Http_Port:Ljava/lang/String;
       4: areturn

  private Test$();
    Code:
       0: aload_0
       1: invokespecial #25                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: putstatic     #27                 // Field MODULE$:LTest$;
       8: aload_0
       9: ldc           #29                 // String lioqu.http.port
      11: putfield      #24                 // Field Http_Port:Ljava/lang/String;
      14: return
}

Как видите, указание типа значительно изменило байткод и возвращаемое значение более константой не считается. В общем, чо-чо, Scala, упячка, попячемся, господа.

Рубрики: Scala

↑ Наверх


blog comments powered by Disqus

Контакты

Igor Zinkovsky aka TLoD,Snake. Писать на электропочту, стучаться в аську 302380533, искать в Санкт-Петербурге.

© 2002-2019