Kelas perluasan generik DAN mengimplementasikan antarmuka di Kotlin


90

Katakanlah saya menginginkan variabel tipe, T, yang memperluas kelas tertentu dan mengimplementasikan antarmuka. Sesuatu seperti:

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

Apa sintaks untuk ini di Kotlin?

Jawaban:


186

Hanya satu batas atas yang dapat ditentukan di dalam tanda kurung sudut.

Kotlin menawarkan sintaks yang berbeda untuk batasan umum jika ada lebih dari satu batasan:

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

dan untuk fungsi:

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

Itu didokumentasikan di sini .


3
Apakah ada cara untuk menggunakannya untuk jenis kesenangan parametr, misalnya, fun foo (arg: ClassType, InterfaceType) {}? Tanpa menambahkan parameter tipe ke kelas
Ufkoku

1
@Ufkoku, tidak, tidak ada cara untuk melakukannya: tidak ada tipe persimpangan di Kotlin, dan parameter umum hanya dapat dideklarasikan secara eksplisit.
hotkey

1
@hotkey Saya memiliki fungsi di bawah ini: fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService. Saya tidak peduli dengan tipe T. Tapi saat saya memanggil metode ini, Kotlin menanyakan tipe spesifiknya. Jadi bagaimana saya bisa memanggil metode ini?
leimenghao
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.