문제

스칼라가 어떻게 정의하는지와 비슷한 것을 달성하고 싶습니다. Map ~처럼 둘 다 사전 정의 된 type 그리고 object. ~ 안에 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)

Howver, 이것은 내 유형 별칭을 동시에 가져 오는 동안 불가능합니다. 참고 :이 코드는 사전 정의 된 유형을 선언하지 않고 가져 오면 제대로 작동합니다! 이것을 달성하기 위해 여기서 사용할 수있는 구문이 있습니까?

도움이 되었습니까?

해결책

Scala 2.8은 패키지 개체의 개념을 소개합니다. 2.7의 Predef에 있던 많은 것들이 Scala 패키지의 패키지 개체로 옮겨졌습니다.

"글로벌 별명을 만드는 방법"은 종종 패키지 개체 사용에 대한 답이 있습니다. (당신은 진정으로 글로벌 별칭을 직접 만들 수 없으며, 그 전원은 스칼라 개발자를 위해 예약되어 있지만, 스칼라의 패키지의 진정으로 중첩 된 패키지의 특성 덕분에 패키지와 하위 포장지에서 자신의 이름이나 별명을 사용할 수 있습니다. .))

불행히도 패키지 개체에는 SID (Scala Improvement Document)가 없지만 유용한 링크에는 다음이 포함됩니다.

다른 팁

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 사용 정적 가져 오기:

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};
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top