Kotlin класс, реализующий интерфейс generi c дважды (с разными типами) - PullRequest
1 голос
/ 20 июня 2020

Короче говоря: имея C# опыт работы с явной реализацией интерфейсов, я попытался сделать то же самое на Kotlin и потерпел неудачу (или еще не нашел способа). Ситуация:

interface IProblem<T> {
    fun solve(t: T)
}

class Puzzle: IProblem<Int>, IProblem<Any> {
    override fun solve(t: Int) {
    }

    override fun solve(t: Any) {
    }
}

Как видите, у меня есть класс, который я планирую использовать в качестве реализации для одного и того же интерфейса generi c, применяемого дважды, с двумя разными типами T внутри. Для простоты предположим, что они Int и Any (это не имеет значения, они просто не одно и то же, ни потомок / предок друг для друга).

Итак, я ожидал Я могу прямо сказать: «Эй, этот метод solve() предназначен для IProblem<Int>, а другой solve() - для IProblem<Any>. Удивительно, но все, что я могу получить, - это IDE, утверждающая, что два метода имеют одинаковую подпись JVM.

Правильно ли я, что в Kotlin нет такой вещи, как явная реализация интерфейса, и мне нужно переосмыслить свой дизайн? Я бы вообразил что-то вроде этого:

class Puzzle: IProblem<Int>, IProblem<Any> {
    override fun IProblem<Int>.solve(t: Int) {
    }

    override fun IProblem<Any>.solve(t: Any) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...