Tôi đã các chức năng mở rộng sau đây đơn giản Kotlin:Kotlin tài sản: "Loại tham số của một tài sản phải được sử dụng trong loại máy thu của nó"
// Get the views of ViewGroup
inline val ViewGroup.views: List<View>
get() = (0..childCount - 1).map { getChildAt(it) }
// Get the views of ViewGroup of given type
inline fun <reified T : View> ViewGroup.getViewsOfType() : List<T> {
return this.views.filterIsInstance<T>()
}
Mã này biên dịch và hoạt động tốt. Nhưng, tôi muốn hàm getViewsOfType
là thuộc tính, giống như views
. Android Studio thậm chí còn đề xuất nó. Tôi cho AS làm việc tái cấu trúc và tạo mã này:
inline val <reified T : View> ViewGroup.viewsOfType: List<T>
get() = this.views.filterIsInstance<T>()
Nhưng mã này không biên dịch. Lỗi này gây ra lỗi: "Loại tham số của thuộc tính phải được sử dụng trong loại máy thu"
Sự cố ở đây là gì? Tìm kiếm trợ giúp về lỗi này dường như không dẫn đến câu trả lời.
Vâng Tôi nghĩ rằng đây là đúng. Trong thực tế khi nghĩ về nó theo cách này, hàm 'getViewOfType' của tôi là vô dụng vì Kotlin đã có cách lọc bộ sưu tập theo kiểu. –