2009-10-22 6 views
3

je voudrais obtenir quelque chose de similaire à la façon dont scala définit Map comme deux un type et object prédéfini. En Predef:Utilisation d'alias de type Java énumérations

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

Cependant, je voudrais faire cela en utilisant Java enum s (à partir d'une bibliothèque partagée). Ainsi, par exemple, j'ai quelques alias global:

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

La raison est que je voudrais être en mesure d'utiliser le code comme:

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

Howver, cela ne peut tout importer mon alias de type en même temps. Note: ce code fonctionnerait très bien si je n'avais pas déclaré un type prédéfini et l'ai importé! Y a-t-il une syntaxe que je peux utiliser ici pour y parvenir?

Répondre

5

Scala 2.8 introduit le concept d'objets de package. Beaucoup de choses qui étaient dans Predef dans 2.7 ont été déplacées dans l'objet paquet du paquet scala.

Les questions de la forme "comment faire un alias global" ont souvent la réponse: utiliser des objets de paquet. (Vous ne pouvez pas créer vous-même un alias global, ce pouvoir est réservé aux développeurs Scala, mais vous pouvez créer votre propre nom ou alias disponible dans l'un de vos packages et sous-packages, grâce à la véritable nature des packages de Scala .)

Malheureusement il n'y a pas un SID (Scala amélioration du document) sur les objets de package, mais quelques liens utiles:

1

Scala utilisent simplement l'importation:

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

Et pour Java utilisent static import:

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}; 
+0

Alexandre - c'est une question ** Scala ** - pas une Java! –

+0

Changé la réponse pour Scala –

Questions connexes