2012-06-11 8 views
5

Gdybym zdefiniować obiekt pakietówKiedy inicjalizowane są obiekty pakietu?

package com.something.else 

package object more { 
    val time = System.currentTimeMillis 
    // ... other stuff ... 
} 

który następnie importowany gdzieś w kodzie źródłowym.

import com.something.else.more 

Kiedy ten obiekt (i jego elementy) został zainicjowany/skonstruowany?

Innymi słowy, co decyduje o wartości more.time?
Czy jest oceniany przy pierwszym uruchomieniu programu? Lub po raz pierwszy jest dostępny? Lub po raz pierwszy dostęp do more?

+0

Domyślam się, że ładowarka klas najpierw ładuje więcej, ale nie mogę tego teraz sprawdzić ... –

Odpowiedz

7

Łatwo sprawdzić:

package something 

package object more { 
    val time = System.currentTimeMillis 
} 

// in separate file: 
package something.more 

object Test extends App { 
    val now = System.currentTimeMillis 

    Thread.sleep(1000) 

    println(now) 
    println(time) 
} 

daje:

1339394348495 
1339394349496 

Drugi raz to ~ 1000 ms później, więc gdy obiekt pakiet jest najpierw uzyskać, jak to będzie z każdym inny obiekt.

Powiązane problemy