У меня есть класс mixin, который объединяет функциональность для разных типов, которые не имеют общего наследия. Микширование применяется с помощью аннотации @Mixin, поэтому оно обрабатывается во время компиляции.
Некоторые из методов mixin возвращают this в результате вызова метода. Проблема в том, что this относится к типу микширования, а не к типу базового класса. Когда я хочу работать, набираемый в остальной части приложения, выдается исключение ClassCastException о том, что тип смешивания не может быть приведен к базовому типу.
В приведенном ниже примере кода return this
возвращает объект типа AMixin вместо объекта типа BaseClass.
Как я могу return this
вернуть объект типа BaseClass вместо объекта типа AMixin?
class AMixin {
def getWhatIWant(){
if(isWhatIwant){
return this
} else {
getChildWhatIWant()
}
}
def getChildWhatIWant(){
for (def child in childred) {
def whatIWant = child.getWhatIWant()
if (whatIWant) {
return whatIWant
}
}
return null
}
}
@Mixin(AMixin)
class BaseClass {
boolean isWhatiWant
List<baseClass> children
}