Не удается поместить класс сущности в метод менеджера getEntityClass - PullRequest
0 голосов
/ 01 октября 2018

Я хотел бы создать ClientLimitHistoryManager, который будет реализовывать SimpleManager, но есть проблема с getEntityClass (), потому что класс, который я пытаюсь вернуть, не похож на компилятор.

abstract class SimpleManager<T> {
    @PersistenceContext
    open lateinit var entityManager: EntityManager

    abstract fun <T> getEntityClass(): Class<T>
}



@Stateless
open class ClientLimitHistoryManager : SimpleManager<ClientLimit>() {
    override fun <ClientLimit> getEntityClass(): Class<ClientLimit> {
        return ClientLimit::class
    }
}

screen with error

Я пытался также с ClientLimit :: class.java, но ничего лучшего результата.

Возможно ли это как-то сделать в Kotlin?

1 Ответ

0 голосов
/ 01 октября 2018

Вы объявили универсальный несколько раз.Вот откуда произошла ошибка параметра reified.

    abstract fun <T> getEntityClass(): Class<T>

должен измениться на:

    abstract fun getEntityClass(): Class<T>

Поскольку универсальный T уже был объявлен, когда вы написали abstract class SimpleManager<T>

Затем исправьте подкласс, изменив

override fun <ClientLimit> getEntityClass(): Class<ClientLimit> {
    return ClientLimit::class
}

на

override fun getEntityClass(): Class<ClientLimit> {
    return ClientLimit::class
}

Таким образом, ошибка параметра reified исчезнет, ​​и у вас останется «Несоответствие типов».ошибка.

Измените ClientLimit::class на ClientLimit::class.java и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...