汎用拡張クラスANDはKotlinでインターフェースを実装します


86

特定のクラスを拡張し、インターフェイスを実装する型変数Tが必要だとします。何かのようなもの:

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

Kotlinでのこれの構文は何ですか?

回答:


179

山かっこ内に指定できる上限は1つだけです。

Kotlinは、複数の制約がある場合、ジェネリック制約に対して異なる構文を提供します。

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

および関数の場合:

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

ここに記載されています


3
たとえば、fun foo(arg:ClassType、InterfaceType){}などのパラメータタイプのfunに使用する方法はありますか?クラスにタイプパラメータを追加せずに
Ufkoku 2017年

1
@Ufkoku、いいえ、それを行う方法はありません。Kotlinには交差型がなく、ジェネリックパラメーターは明示的にのみ宣言できます。
ホットキー2017年

@hotkey私は以下の関数を持っています:fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService。私はTのタイプを気にしません。しかし、このメソッドを呼び出すと、Kotlinは特定のタイプを要求します。では、どうすればこのメソッドを呼び出すことができますか?
leimenghao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.