
[code]

    trait A
    
    object B extends A {
      println("B")
    }
    
    object C exetends A {
      println("C")
    }
    
    object Main {
      def main(args: Array[String]): Unit = {
        println("RUN")
      }
    }
    
[/code]

このとき、標準出力には

`RUN`

しか表示されません。

これをどうにか、明示的なアクセスなく

[code]

    B
    C
    RUN
    
[/code]

と表示されるようにしたいです。なんらかのかたちでアクセスされる前に初期化したいです。  
特定のアノテーションをつけると、そのクラス・オブジェクトにアクセスして初期化してくれるとか、型パラメータAを指定したとき、そのサブクラスにアクセスできる、みたいな方法はないですか？


CC BY-SA 3.0
2018-02-22T17:49:01.327
41935
2020-04-22T12:01:30.143
8396
question
scala
scalaのobjectを事前初期化する方法


アノテーションなんかないけど、それを使ったら、ちゃんと

[code]

     B C RUN
    
[/code]

を表示されると思います:

[code]

     trait A
    
     object B extends A {
       {
         println("B")
       }
     }
    
     object C extends A {
       println("C")
     }
    
     object Main {
       def main(args: Array[String]): Unit = {
         B
         C
         println("RUN")
       }
     }
    
[/code]

Scalaのオブジェクトはlazyですから、他の方法はないと思います。

その返事は不満足場合は、すみません。日本人じゃないですから、質問を勘違いしたかもしれないです。


CC BY-SA 4.0
2018-07-26T11:49:34.580
46996
2018-09-04T11:13:18.937
2018-09-04T11:13:18.937
29476
29476
41935
answer