Frage

Ich möchte etwas erreichen, ähnlich wie scala definiert Map als beide eine vordefinierte type und object.In Predef:

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

Jedoch möchte ich dies mit Java enums (aus einer gemeinsam genutzten Bibliothek).So zum Beispiel, hätte ich einige Globale alias:

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

Der Grund dafür ist, dass ich möchte in der Lage sein zu verwenden Sie code wie:

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

Howver, dies ist nicht möglich, beim importieren von meinem alias in der gleichen Zeit. Hinweis:dieser code funktioniert gut, wenn ich hatte nicht erklärt, eine vordefinierte und importiert es! Gibt es eine syntax, die ich verwenden kann, hier um dies zu erreichen?

War es hilfreich?

Lösung

Scala 2.8 Einführung in das Konzept der Paket-Objekte.Eine Menge von dem Zeug, das war in Vordef in 2.7 wurde verschoben, um die scala-Paket-Paket-Objekt.

Fragen der form "wie mache ich einen globalen alias" oft haben die Antwort:verwenden Sie den Paket-Objekte.(Sie können nicht machen einen wirklich globalen alias sich, dass die macht der ist reserviert für die Scala-Entwickler, aber Sie können Ihren eigenen Namen oder alias zur Verfügung, während eine Ihrer Pakete und seine Unterpakete, Dank der wirklich verschachtelte Natur der Pakete in Scala.)

Leider gibt es nicht eine SID (Scala Verbesserung Dokument) on-package-Objekte, aber einige hilfreiche links:

Andere Tipps

In Scala verwenden Sie einfach importieren:

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

Und für Java verwenden statischer 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};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top