私はMockitoを使ってKotlinでジェネリックインターフェイスを模擬しようとしています。しかし、これまで私は自然な解決策を見いださなかった。私は、次のいずれかとX
を模擬できKotlinとMockitoとのジェネリックインターフェイスの模擬
interface X<T> {
fun x(): T
}
fun f(x: X<Int>) = x.x()
::考える
val x = f(Mockito.mock(X::class.java) as X<Int>)
しかし、それは "未チェックのキャスト" 警告を生成します。
@Mock lateinit var x: X<Int>
は、しかし、私は最終的に私のフィールドを持つことが好きなので
@Mock
アノテーションを使用する必要はありません。は、ヘルパー関数を導入mockito-kotlin libraryがするように、:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!!
を次に、このようにそれを呼び出す:
val x: X<Int> = mock()
しかし、私はヘルパー関数を使用する必要はありません。
Mockitoとの汎用インターフェースをモックするためのエレガントで純粋なKotlinの方法はありますか? (私は警告なしで1のバージョンを希望します)
なぜヘルパー関数を使いたくないのですか? 'val x = f(モック())'の何が間違っていますか? –
mfulton26
「チェックされていないキャスト」の問題の回避策のように感じます。回避策なしでそれを行う方法はありますか? – jhunovis
「チェックされていないキャスト」問題の回避策として、[reified type parameters](https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters)が表示されません。実際には、型パラメータ(またはそれに類するもの)を明確化していないという(Javaの)回避策として、「チェックされていないキャスト」の問題があります。 – mfulton26