複数のパラメータの型制約にKotlinにおけるジェネリック型を持つメソッドを呼び出します

mrpasqal:

私はJavaで書かれた次のインターフェイスメソッドの定義があります。

<T extends View & ISpecificView> T getSpecificView();

Javaベースの消費者のコードは、単にそれを呼び出すことによって、この方法で動作して延びるオブジェクトとして返された値を処理することができるViewクラスを実装し、ISpecificView以下のようにインタフェースを:

getContainer().getSpecificView().whateverTclassMethod()

Kotlin Iで同じコードを呼び出すためにしようとすると取得Type inference failed: Not enough information to infer parameter T (...) Please specify it explicitlyでエラーgetSpecificView()方法を。それは、任意の祖先かもしれないので、私は明示的にタイプを提供してみたいが、私は、任意の特定のクラスを渡すことができないよView実装するクラスISpecificViewのインターフェイス。いずれかの単一の受け渡しViewISpecificViewヘルプにはない-それは、その結果Type argument is not within its bounds. Expected: View! Found ICustomView、逆もまた同様です。

Javaのと同等に合格するためにあらゆる可能性があるT extends View & ISpecificView、私はそれを利用することができるので、メソッドの呼び出し中にKotlinには?

LppEdd:

(と私は右の質問を得た願っています!)要約すると、Javaであなたが行うことができます

final View view = getContainer().getSpecificView();  // or
final ISpecificView iview = getContainer().getSpecificView();

Kotlinには同じこと

val view: View = getContainer().getSpecificView()

での結果 Type inference failed: Not enough information to infer parameter T


しようと試みるの50分後...
ただ、ダミーを作成しますclass(抽象?)

abstract class KView : View(), ISpecificView

そして、明示的に一般的な戻り値の型を設定するためにそれを使用します

val view: View = getContainer().getSpecificView<KView>()
view.whateverClassMethod()

val iview: ISpecificView = getContainer().getSpecificView<KView>()
iview.whateverInterfaceMethod()

// or just

(getContainer().getSpecificView<KView>() as View).whateverClassMethod()
(getContainer().getSpecificView<KView>() as ISpecificView).whateverInterfaceMethod()

固有のキャストViewやは、ISpecificViewあなただけ行う場合ので、必要とされます

getContainer().getSpecificView<KView>()

あなたが買ってあげます

class your.package$ExtendingClass cannot be cast to class your.package.KView

それのは完全に罰金です。
でも、Javaで、あなたがしたいかどうかを判断する必要がありますViewISpecificView


この方法は、あなたはすべての方法を操作することができるでしょうViewISpecificView


本当に、私がしようとする他に何かわかりません。ホープ誰かが何か良いを思い付きます。

編集:何を意味するあなたがJavaである場合

final ExtendedView ev = getContainer().getSpecificView();

あなたは戻り値の型が実際に保証することはできませんとしても、これは、それがコンパイルしても、少し間違っ私見ですExtendedViewあなたはそれが延びて確実に知るViewと実装ISpecificView

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=203299&siteId=1