باستخدام المستعارة نوع جافا enums
سؤال
أود أن يحقق شيئا على غرار كيف سكالا يعرف Map
كما سواء مسبقا type
و object
.في Predef
:
type Map[A, +B] = collection.immutable.Map[A, B]
val Map = collection.immutable.Map //object Map
ولكن أود أن تفعل هذا باستخدام جافا enum
s (من المكتبة المشتركة).لذلك على سبيل المثال ، يجب عالمي الاسم المستعار:
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 قد تم نقله إلى سكالا حزمة حزمة الكائن.
الأسئلة على شكل "كيف يمكنني جعل العالمية المستعار" غالبا ما يكون الجواب:استخدام حزمة الكائنات.(لا يمكنك جعل عالمية حقا مستعار نفسك ، أن الطاقة محفوظة سكالا المطورين, ولكن يمكنك أن تجعل الخاصة بك الاسم أو الاسم المستعار المتاحة في جميع أنحاء واحدة من حزم و subpackages بفضل حقا متداخلة طبيعة حزم في سكالا.)
للأسف ليس هناك سيد (سكالا تحسين الوثيقة) على حزمة الكائنات ، ولكن بعض الروابط المفيدة ما يلي:
نصائح أخرى
في سكالا فقط استخدام استيراد:
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")
و استخدام جافا ثابت استيراد:
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};