#kotlin
#kotlin
Вопрос:
Я хотел бы создать функцию по умолчанию для интерфейса с общим атрибутом, и для этого мне нужно получить значение «this» как значение класса T, а не Responsable< T > .
interface Responsable<T> {
fun toResponseModel(assembler: RepresentationModelAssembler<T, EntityModel<T>>): EntityModel<T> {
return assembler.toModel(this)
}
}
На самом деле, «это» является экземпляром Responsabe . Что я должен сделать, чтобы передать параметр T class?
Комментарии:
1. Чего именно вы пытаетесь достичь здесь? Не могли бы вы показать примеры использования интерфейса и метода, которые вы пытаетесь объявить?
Ответ №1:
Если вы хотите объявить функцию, которая работает с любым T
, который также является a Responsable<T>
, возможно, было бы лучше объявить ее как функцию расширения для таких T
s:
interface Responsable<T>
fun <T : Responsable<T>> T.toResponseModel(assembler: RepresentationModelAssembler<T, EntityModel<T>>): EntityModel<T> {
return assembler.toModel(this)
}
Ответ №2:
Вот как я решил эту проблему
interface Responsable<T> {
fun toResponseModel(assembler: RepresentationModelAssembler<T, EntityModel<T>>): EntityModel<T> {
return assembler.toModel(this as T)
}
}
Комментарии:
1. Это довольно небезопасно, нет причин
Responsable<T>
также бытьT
. Что, если вы объявитеclass Dog : Responsable<Cat>
?2. Итак, как это сделать безопасно? Я имею в виду, как объявить, что класс, реализующий этот интерфейс, также должен быть T?
3. Я предложил решение в своем ответе. Я считаю, что он делает то, что вы хотите, но не стесняйтесь комментировать, если это не решит вашу проблему