2009-10-22 4 views
3

Я хотел бы добиться чего-то подобное тому, как Scala определяет Map, как и предопределенный type и object. В Predef:Использование псевдонимов типов в Java перечислений

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

Однако, я хотел бы сделать это с помощью Java enum с (из общей библиотеки). Так, например, я бы некоторые глобальные псевдоним:

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

Причина этого заключается в том, что я хотел бы иметь возможность использовать такой код:

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

Howver, это не возможно, в то время как одновременно импортируя псевдоним типа. Примечание: этот код будет работать нормально, если я не объявил предопределенный тип и не импортировал его! Есть ли какой-то синтаксис, который я могу использовать для достижения этого?

ответ

5

Scala 2.8 вводит концепцию объектов пакета. Многие вещи, которые были в Predef в версии 2.7, были перенесены в пакетный пакет пакета scala.

Вопросы формы «как сделать глобальный псевдоним» часто имеют ответ: используйте объекты пакета. (Вы не можете сделать поистине глобальный псевдоним самостоятельно, эта власть зарезервирована для разработчиков Scala, но вы можете сделать свое собственное имя или псевдоним доступными на одном из ваших пакетов и его подпакетах, благодаря действительно вложенному характеру пакетов в Scala .)

К сожалению, не SID (Scala Улучшение документа) на объектах пакета, но некоторые полезные ссылки включают:

1

В Scala просто использовать импорт:

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

И для Java использовать 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 - это вопрос ** Scala ** - не Java один! –

+0

Изменен ответ для Scala –

Смежные вопросы