Короче говоря: имея 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) {
}
}