Как использовать generi c DAO в Kotlin Exposed - PullRequest
0 голосов
/ 03 мая 2020

У меня проблема при попытке создать интерфейс с обобщенными c DAO для нескольких реализаций раздела API (все разделы имеют одинаковые методы с одинаковыми функциями CRUD, но с разными типами DAO).

Например, Вот как я описываю DAO (просто пример из Exposed docs):

class FileDAO(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<FileDAO>(Files)

    var name by Files.name
    var path by Files.path
    var content by Files.content
    var checksum by Files.checksum
    var created by Files.created
    var modified by Files.modified
    var `package` by PackageDAO referencedOn Files.`package`

    fun toModel(): SerializedFile {
        return SerializedFile(
            id.value,
            name,
            path,
            checksum,
            created.toString(),
            modified.toString(),
            `package`.toModel()
        )
    }
}

При попытке реализовать универсальный c интерфейс я делаю это:

interface SectionHandler<DAO> where DAO: FileDAO {
    fun <DAO> getAllHandler(params: Parameters): Response where DAO: FileDAO  {
        return transaction(DBConn.getUserConn(params["user"]!!.toInt())) {
            val files = DAO.all().notForUpdate().asIterable()
            val response = FilesSection.Companion.FilesResp(emptyList<SerializedFile>().toMutableList())
            files.forEach { response.files.add(it.toModel()) }
            response
        }
    }
...

IntellijIDEA stati c проверка кода дает мне эту ошибку при DAO доступе к объекту:

Параметр типа 'DAO' не может иметь или наследовать сопутствующий объект, поэтому он не может находиться слева от точки

Я не смог найти ни одного примера такой же ошибки в аналогичном контексте, кто-нибудь может помочь?

...