2011-05-19 17 views
8

Saludos,Restringir la visibilidad constructor de la clase en Scala 2.9

¿Cómo puedo hacer que el constructor Foo visible sólo para este paquete (prueba de la unidad + objeto acompañante)?

no quiero ser capaz de crear una instancia de Foo fuera de este 2 archivos ...

Foo.scala

package project.foo 

class Foo(val value: String) 

object Foo { 
    def generate: Foo = new Foo("test") 
} 

FooSpec.scala

package project.foo 

import org.spec2.mutable._ 

class FooSpec extends Specification { 
    "Foo" should { 
    "be constructed with a string" { 
     val foo = new Foo("test") 
     foo.value must be "test" 
    } 
    } 
} 

Estoy usando Scala 2.9

+0

Por cierto, el valor devuelto por una llamada al constructor nunca es 'nulo'. Si falta su constructor de cadena, no se compilará. Si por algún motivo (pila completa, etc.) no se puede crear el objeto, se lanzará una excepción. –

+0

@ Jean-Philippe Pellet: ¡por supuesto! Lo sé, fue solo por el ejemplo :) –

+1

OK, solo asegúrate de que otras personas (que quizás no lo sepan) no malinterpreten tu código. –

Respuesta

16

Prueba esto:

package project.foo 
class Foo private[foo] (value: String) 

A continuación, el constructor de Foo sólo es accesible desde el paquete foo.

Puede obtener más información acerca de la visibilidad de Scala (busque especialmente el ámbito privado y el ámbito protegido) here.

+0

Fantástico :) muchas gracias Jean-Philippe –

Cuestiones relacionadas