Genel genişletme sınıfı VE Kotlin'de arabirim uygular


90

Diyelim ki, belirli bir sınıfı genişleten ve bir arayüz uygulayan bir tür değişkeni, T istiyorum. Gibi bir şey:

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

Kotlin'de bunun sözdizimi nedir?

Yanıtlar:


186

Köşeli parantez içinde yalnızca bir üst sınır belirtilebilir.

Kotlin, birden fazla kısıtlama olduğunda genel kısıtlamalar için farklı sözdizimi sunar:

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

ve işlevler için:

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

Bu belgelenmiştir burada .


3
Parametre eğlence türü için kullanmanın bir yolu var mı, örneğin, fun foo (arg: ClassType, InterfaceType) {}? Sınıfa tür parametresi eklemeden
Ufkoku

1
@Ufkoku, hayır, bunu yapmanın bir yolu yok: Kotlin'de kesişim türleri yoktur ve genel parametreler yalnızca açıkça bildirilebilir.
kısayol tuşu

1
@hotkey aşağıda bir işlevi vardır: fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService. T'nin tipi umrumda değil. Ama bu yöntemi çağırdığımda Kotlin belirli bir türü soruyor. Peki bu yöntemi nasıl arayabilirim?
leimenghao
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.