Có a mailing list thread nơi Martin đã trả lời:
Nó tương ứng với JVM. Bạn có thể bỏ qua khởi tạo trường nhưng không khởi tạo biến cục bộ. Bỏ qua các khởi tạo biến cục bộ có nghĩa là trình biên dịch phải có khả năng tổng hợp một giá trị mặc định cho mọi kiểu. Đó không phải là dễ dàng như vậy khi đối mặt với các thông số kiểu, chuyên môn, v.v.
Khi ép về làm thế nào có hoặc nên có bất kỳ sự khác biệt giữa các trường và người dân địa phương trong vấn đề Scala tổng hợp các giá trị mặc định, ông tiếp tục nói:
Về bytecode có IS một rõ ràng Sự khác biệt. JVM sẽ khởi tạo các trường đối tượng theo mặc định và yêu cầu các biến cục bộ được khởi tạo một cách rõ ràng. […] Tôi không chắc liệu chúng ta có nên phá vỡ một nguyên tắc hữu ích của Java (người dân địa phương phải được khởi tạo trước khi được sử dụng) hay không, hay chúng ta nên đi chiều dài đầy đủ và giới thiệu việc kiểm tra khởi tạo dựa trên luồng như trong Java. Đó sẽ là giải pháp tốt hơn, IMO, nhưng sẽ yêu cầu công việc quan trọng về mặt kỹ thuật và thực hiện. Đối mặt với những lựa chọn bản năng tự nhiên của tôi là không làm gì cả cho bây giờ :-)
Vì vậy, nếu tôi hiểu đúng, trình biên dịch Scala không thực sự tổng hợp các giá trị mặc định cho các lĩnh vực đối tượng, nó tạo ra bytecode rằng lá JVM để xử lý điều này.
Theo SI-4437 đã có thỏa thuận từ Martin thực sự xác nhận mẫu null.asInstanceOf[T]
trong thông số ngôn ngữ, dường như thiếu khả năng hỗ trợ thay thế tốt hơn trong các hạn chế hiện có.
Vậy tại sao phải như vậy? – Raman