Không có gì là subtype của tất cả mọi thứ, vì vậy nó là trong một nghĩa nào đó phần truy cập của bất kỳ, đó là loại siêu của tất cả mọi thứ. Không có gì không thể được khởi tạo, bạn sẽ không bao giờ giữ một đối tượng Không có gì. Có hai tình huống (tôi biết), nơi Không có gì là thực sự hữu ích:
- Một chức năng không bao giờ trả (trái ngược với một hàm trả về không hữu ích giá trị, mà sẽ sử dụng đơn vị thay vì), trong đó xảy ra cho các vòng vô hạn, chặn vô hạn, luôn luôn ném ngoại lệ hoặc thoát khỏi ứng dụng
- Như một cách để chỉ định loại Container trống, ví dụ Không hoặc Không. Trong Java, bạn không thể có một đối tượng Nil đơn lẻ cho một danh sách bất biến chung mà không cần đúc hoặc các thủ thuật khác: Nếu bạn muốn tạo một Danh sách Ngày, ngay cả phần tử trống cần phải có kiểu đúng, phải là một kiểu con của Ngày. Là Ngày và ví dụ: Integer không chia sẻ một subtype phổ biến trong Java, bạn không thể tạo một cá thể Nil như vậy mà không có thủ đoạn, mặc dù Nil của bạn thậm chí không giữ bất kỳ giá trị nào. Bây giờ Scala có loại phụ phổ biến này cho tất cả các đối tượng, vì vậy bạn có thể định nghĩa Nil là
object Nil extends List[Nothing]
và bạn có thể sử dụng nó để bắt đầu bất kỳ Danh sách nào bạn thích.
Câu hỏi thứ hai của bạn: Có, điều đó sẽ hữu ích. Tôi đoán đã có một trình chuyển đổi trình biên dịch để bật các cảnh báo này, nhưng tôi không chắc chắn.
Câu trả lời đúng cho câu hỏi chưa rõ ràng của tôi, đủ tốt cho bây giờ. :) –