Как получить класс с типом param - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь получить Класс>.

Чтобы издеваться над Обозревателем, мне нужен его класс.Я пытался использовать Observer<Int>::class.java, но получаю "Только классы разрешены в левой части литерала класса"

MWE (важными являются строки 1-2, для полноты включены логика предметной области и проверка mockito):

val clazz = Observer<Int>::class.java  // Error
val observer: Observer<Int> = mock(clazz)

addObserver(observer)
val y = 1
setObservedValue(y)


verify(observer).onChanged(y)

1 Ответ

0 голосов
/ 30 июня 2019

Существует только один Observer::class, он не зависит от параметра типа. Так что вы можете написать

@Suppress("UNCHECKED_CAST")
val clazz = Observer::class.java as Class<Observer<Int>>

Или если вы столкнетесь с этим более одного раза (что вероятно)

inline fun <reified T> mock(): T = mock(T::class.java)

называется

val observer = mock<Observer<Int>>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...