Có thể hữu ích khi nghĩ về phép chiếu sao như một cách để đại diện không chỉ cho bất kỳ loại nào, mà còn là một số loại cố định mà bạn không biết chính xác là gì.
Ví dụ: kiểu MutableList<*>
đại diện cho danh sách một cái gì đó (bạn không biết chính xác là gì). Vì vậy, nếu bạn cố gắng thêm một cái gì đó vào danh sách này, bạn sẽ không thành công. Nó có thể là một danh sách các String
s, hoặc một danh sách các Int
s, hoặc một danh sách các thứ khác. Trình biên dịch sẽ không cho phép đưa bất kỳ đối tượng nào vào danh sách này vì nó không thể xác minh rằng danh sách chấp nhận các đối tượng thuộc loại này. Tuy nhiên, nếu bạn cố gắng lấy một phần tử ra khỏi danh sách như vậy, chắc chắn bạn sẽ nhận được một đối tượng kiểu Any?
, bởi vì tất cả các đối tượng trong Kotlin đều kế thừa từ đó Any
.
Từ asco bình luận bên dưới:
Ngoài ra, List<*>
có thể chứa các đối tượng thuộc bất kỳ loại nào, nhưng chỉ có loại đó, vì vậy nó có thể chứa Chuỗi (nhưng chỉ Chuỗi), trong khi List<Any>
có thể chứa Chuỗi và Số nguyên và không chứa, tất cả trong cùng một danh sách.