Verwendung von Typ-Aliase Java enums
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 enum
s (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?
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};