Pergunta

Eu gostaria de conseguir algo semelhante a como define scala Map como ambos a predefinida type e object. Em Predef:

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

No entanto, eu gostaria de fazer isso usando enums Java (a partir de uma biblioteca compartilhada). Assim, por exemplo, eu teria algum apelido mundial:

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

A razão para isso é que eu gostaria de ser capaz de usar um código como:

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

Howver, isso não é possível, enquanto a importação de meus tipo de alias, ao mesmo tempo. Nota: este código iria funcionar muito bem se eu não tivesse declarado um tipo pré-definido e importados-lo Existe alguma sintaxe posso usar aqui para alcançar este

?
Foi útil?

Solução

Scala 2.8 introduz o conceito de objetos de pacote. Um monte de coisas que estava em predef em 2.7 foi movido para objeto de pacote do pacote scala.

As perguntas da forma "como faço para fazer um apelido global" têm muitas vezes a resposta: objetos de pacote uso. (Você não pode fazer um alias verdadeiramente globais si mesmo, que o poder está reservado para os desenvolvedores Scala, mas você pode fazer o seu próprio nome ou apelido disponível em todo um de seus pacotes e seus subpacotes, graças à natureza verdadeiramente aninhada de pacotes em Scala .)

Infelizmente não é um SID (Scala Melhoria Document) em objetos de pacote, mas alguns links úteis incluem:

Outras dicas

Em Scala apenas usar a importação:

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

E para uso Java importação 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top