سؤال

ما هو مكافئ سكالا من كتلة جافا الثابتة؟

هل كانت مفيدة؟

المحلول

رمز في المُنشئ (أي الجسم) للكائن المصاحب ليس بالضبط نفس الكود في كتلة initialiser ثابتة لفئة Java. في المثال أدناه ، أقوم بإنشاء مثيل A ، لكن التهيئة لا تحدث.

scala> object Test { class A; object A { println("A.init") }}        
defined module Test

scala> new Test.A
res3: Test.A = Test$A@3b48a8e6

scala> Test.A
A.init
res4: Test.A.type = Test$A$@6e453dd5

لتشغيل بناء الكائن المصاحب عند إنشاء الحالة الأولى للفئة ، يمكنك الوصول إليه من مُنشئ الفئة.

scala> object Test { class A { A }; object A { println("A.init") }}
defined module Test

scala> new Test.A                                                  
A.init
res5: Test.A = Test$A@4e94a28e

scala> new Test.A
res6: Test.A = Test$A@30227d4e

في العديد من الظروف ، لا يهم الفرق. ولكن إذا كنت تطلق صواريخ (أو آثار جانبية أخرى) ، فقد تهتم!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top