我想要实现类似的东西如何定义斯卡拉 Map 作为 一个预先定义的 typeobject.在 Predef:

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

然而,我想要做到这一使用Java enums(从一个共用图书馆)。例如,我有一些全球性的别名:

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)

当时,这不可能同时进我的类别,在同一时间。 注:这个代码的工作就好了如果我不得不宣布一个预先定义的类型和进口! 是有某些语法我可以用这里来实现这一目标?

有帮助吗?

解决方案

斯卡拉2.8的概念引入了包的对象。很多东西,是在Predef在2.7已被转移到卡拉的包裹包的对象。

问题的形式"我怎么做一个全球性的别名的"经常有答案:使用的软件包对象。(你不能让一个真正全球性的别名自己的,这种权力保留给卡拉的开发,但是你可以做你自己的名字或化名可在一个软件包及其子包,感谢真的嵌套的性质的包装在卡拉.)

遗憾的是没有一个SID(斯卡拉改善文件)上包对象,但是一些有用的链接包括:

其他提示

在Scala中只需使用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")

对于Java,使用静态导入

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};
scroll top