代码之家  ›  专栏  ›  技术社区  ›  Travis Brown

Java代码中的嵌套Scala单例

  •  16
  • Travis Brown  · 技术社区  · 15 年前

    我有以下Scala(2.8)代码:

    object A {
      val message = "hello"
      object B {
        val message = "world"
      }
    }
    

    public class C {
      public static String message() {
        return "HELLO";
      }
      public static class D {
        public static String message() {
          return "WORLD";
        }
      }
    }
    

    当我从Scala给他们打电话时,他们的工作正如我所期望的:

    scala> A.message  
    res0: java.lang.String = hello
    
    scala> A.B.message
    res1: java.lang.String = world
    
    scala> C.message  
    res2: java.lang.String = HELLO
    
    scala> C.D.message
    res3: java.lang.String = WORLD
    

    System.out.println(A.message());
    System.out.println(A.B.message()); // cannot find ... symbol  : variable B ...
    System.out.println(C.message());
    System.out.println(C.D.message());
    

    很明显,当我用 javap . 我知道我可以用

    System.out.println(A$B$.MODULE$.message());
    

    val getB = B 给我的 A 对象并将第二行替换为

    System.out.println(A.getB().message());
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mario Galic    7 年前

    我对斯卡拉知之甚少,但考虑到 the way Scala is compiled into bytecode

        2
  •  0
  •   Mario Galic    7 年前

    我在Scala 2.12中使用了一种稍微不同的语法:

    给定Scala

    object A {
      object B {
        val message = "world"
      }
    }
    

    然后 message

    A.B.MODULE$.message();