Domanda

Vorrei ottenere qualcosa di simile a come scala definisce Map come entrambi un tipo e oggetto predefiniti . In Predef :

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

Tuttavia, mi piacerebbe farlo usando Java enum s (da una libreria condivisa). Quindi, per esempio, avrei un pseudonimo globale:

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

Il motivo è che mi piacerebbe poter usare un codice come:

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

Tuttavia, questo non è possibile durante l'importazione del mio alias di tipo allo stesso tempo. Nota: questo codice funzionerebbe perfettamente se non avessi dichiarato un tipo predefinito e lo avessi importato! Esiste una sintassi che posso usare qui per raggiungere questo obiettivo?

È stato utile?

Soluzione

Scala 2.8 introduce il concetto di oggetti pacchetto. Molte cose che erano in Predef nella 2.7 sono state spostate nell'oggetto pacchetto del pacchetto scala.

Domande sul modulo "come posso creare un alias globale" spesso hanno la risposta: usa oggetti pacchetto. (Non puoi creare un alias veramente globale da solo, quel potere è riservato agli sviluppatori Scala, ma puoi rendere il tuo nome o alias disponibile in uno dei tuoi pacchetti e relativi pacchetti secondari, grazie alla natura veramente nidificata dei pacchetti in Scala .)

Sfortunatamente non esiste un SID (Scala Improvement Document) sugli oggetti pacchetto, ma alcuni collegamenti utili includono:

Altri suggerimenti

In Scala basta usare import:

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 per Java utilizzare import statico :

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};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top