Lớp mở rộng chung AND triển khai giao diện trong Kotlin


86

Giả sử tôi muốn một biến kiểu, T, mở rộng một lớp nhất định và triển khai một giao diện. Cái gì đó như:

class Foo <T : Bar implements Baz> { ... }

Cú pháp cho điều này trong Kotlin là gì?

Câu trả lời:


179

Chỉ có thể chỉ định một giới hạn trên bên trong dấu ngoặc nhọn.

Kotlin cung cấp các cú pháp khác nhau cho các ràng buộc chung khi có nhiều hơn một ràng buộc:

class Foo<T>(val t: T) where T : Bar, T : Baz { ... }

và cho các chức năng:

fun <T> f(): Foo where T : Bar, T : Baz { ... }

Nó được ghi lại ở đây .


3
Có cách nào để sử dụng nó cho kiểu tham số vui nhộn, ví dụ: fun foo (arg: ClassType, InterfaceType) {} không? Mà không cần thêm tham số kiểu đến lớp
Ufkoku

1
@Ufkoku, không, không có cách nào để làm điều đó: không có kiểu giao cắt nào trong Kotlin và các tham số chung chỉ có thể được khai báo rõ ràng.
phím nóng

@hotkey Tôi có một chức năng dưới đây: fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService. Tôi không quan tâm loại của T. Nhưng khi tôi gọi phương thức này, Kotlin yêu cầu loại cụ thể. Vậy làm thế nào tôi có thể gọi phương thức này?
leimenghao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.