2010-02-27 34 views

Trả lời

31

Mã trong hàm tạo (có nghĩa là phần thân) của đối tượng đồng hành là không phải là chính xác giống như mã trong khối khởi tạo tĩnh của một lớp Java. Trong ví dụ dưới đây, tôi tạo một thể hiện của A, nhưng khởi tạo không xảy ra.

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

scala> new Test.A 
res3: Test.A = [email protected] 

scala> Test.A 
A.init 
res4: Test.A.type = [email protected] 

Để kích hoạt đối tượng đồng hành khi phiên bản đầu tiên của lớp được tạo, bạn có thể truy cập nó từ trình tạo lớp.

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

scala> new Test.A             
A.init 
res5: Test.A = [email protected] 

scala> new Test.A 
res6: Test.A = [email protected] 

Trong nhiều trường hợp, sự khác biệt sẽ không quan trọng. Nhưng nếu bạn đang phóng tên lửa (hoặc các tác dụng phụ khác), bạn có thể quan tâm!

Các vấn đề liên quan