Pregunta

Me gustaría lograr algo similar a cómo scala define Mapa como ambos un tipo predefinido y objeto . En Predef :

type Map[A, +B] = collection.immutable.Map[A, B]
val Map = collection.immutable.Map //object Map

Sin embargo, me gustaría hacer esto utilizando Java enum s (de una biblioteca compartida). Así, por ejemplo, tendría un alias global:

type Country = my.bespoke.enum.Country
val Country = my.bespok.enum.Country //compile error: "object Country is not a value"

La razón de esto es que me gustaría poder usar código como:

if (city.getCountry == Country.UNITED_KINGDOM) //or...
if (city.getCountry == UNITED_KINGDOM)

Sin embargo, esto no es posible al importar mi alias de tipo al mismo tiempo. Nota: ¡este código funcionaría bien si no hubiera declarado un tipo predefinido y lo hubiera importado! ¿Hay alguna sintaxis que pueda usar aquí para lograr esto?

¿Fue útil?

Solución

Scala 2.8 introduce el concepto de objetos de paquete. Muchas de las cosas que estaban en Predef en 2.7 se han movido al objeto del paquete del paquete scala.

Preguntas del formulario " ¿cómo hago un alias global " A menudo tienen la respuesta: usar objetos de paquete. (Usted no puede crear un alias verdaderamente global, ese poder está reservado para los desarrolladores de Scala, pero puede hacer que su propio nombre o alias esté disponible en uno de sus paquetes y sus subpaquetes, gracias a la naturaleza verdaderamente anidada de los paquetes en Scala .)

Lamentablemente, no hay un SID (documento de mejora de Scala) en los objetos del paquete, pero algunos enlaces útiles incluyen:

Otros consejos

En Scala solo usa import:

import mypackage.Country
import mypackage.Country._

val c = Country.FRANCE
// With pattern matching:
c match {
  case UK => println("UK")
  case FRANCE => println("FRANCE")
}
// Or with an if:
if (c == FRANCE) println("FRANCE")

Y para Java use importación estática :

package mypackage;

import static mypackage.Country.*;

public class Test {
    public static void main(String[] args) {
        Country c = UK;
        if (c == FRANCE) {
            System.out.println("Ok");
        }
    }
}

enum Country {FRANCE, UK};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top