Question

J'aimerais réaliser quelque chose de similaire à la définition donnée par scala Carte comme à la fois un type et un objet prédéfinis. . Dans Predef :

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

Toutefois, j'aimerais utiliser des enum s Java (à partir d'une bibliothèque partagée). Ainsi, par exemple, j'aurais un alias global:

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

La raison en est que j'aimerais pouvoir utiliser un code tel que:

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

Cependant, cela n’est pas possible lors de l’importation simultanée de mon alias de type. Remarque: ce code fonctionnerait parfaitement si je n'avais pas déclaré un type prédéfini et ne l'avais pas importé! Existe-t-il une syntaxe que je peux utiliser ici pour y parvenir?

Était-ce utile?

La solution

Scala 2.8 introduit le concept des objets de package. Une grande partie des éléments présents dans Predef dans la version 2.7 ont été déplacés vers l’objet package du package scala.

Questions de la forme "Comment créer un alias global" ont souvent la réponse: utiliser des objets de package. (Vous ne pouvez pas créer vous-même un alias vraiment global. Ce pouvoir est réservé aux développeurs Scala, mais vous pouvez également créer votre propre nom ou alias dans l'un de vos packages et ses sous-packages, grâce à la nature véritablement imbriquée des packages dans Scala. .)

Malheureusement, il n'y a pas de SID (Scala Improvement Document) sur les objets de package, mais quelques liens utiles incluent:

Autres conseils

Dans Scala, utilisez simplement 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, utilisez importation statique :

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};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top