2012-06-11 21 views
5

Si defino un objeto de paquete¿Cuándo se inicializan los objetos del paquete?

package com.something.else 

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

que luego se importa en alguna parte del código fuente.

import com.something.else.more 

¿Cuándo se inicializa/construye este objeto (y sus miembros)?

En otras palabras, ¿qué determina el valor de more.time?
¿Se evalúa cuando se inicia el programa por primera vez? ¿O la primera vez que se accede? ¿O se accede a la primera vez more?

+0

Mi suposición sería cuando el cargador de clases cargue primero más, pero no puedo verificarlo ahora ... –

Respuesta

7

Es fácil de comprobar:

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) 
} 

da:

1339394348495 
1339394349496 

La segunda vez es ~ 1000 ms más tarde, por lo que es cuando se accede por primera vez el objeto de paquete, como lo sería con cualquier otro objeto

Cuestiones relacionadas