سؤال

أود أن يحقق شيئا على غرار كيف سكالا يعرف Map كما سواء مسبقا type و object.في Predef:

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

ولكن أود أن تفعل هذا باستخدام جافا 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 قد تم نقله إلى سكالا حزمة حزمة الكائن.

الأسئلة على شكل "كيف يمكنني جعل العالمية المستعار" غالبا ما يكون الجواب:استخدام حزمة الكائنات.(لا يمكنك جعل عالمية حقا مستعار نفسك ، أن الطاقة محفوظة سكالا المطورين, ولكن يمكنك أن تجعل الخاصة بك الاسم أو الاسم المستعار المتاحة في جميع أنحاء واحدة من حزم و 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};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top