Я ждал, пока 2.12 сможет использовать крюк onCreate, но кажется, что он был сдвинут до 2.13. Есть ли какие-либо предложения по созданию достойной альтернативы? В сущности, у меня есть черта и абстрактный класс следующим образом:Scala OnCreate альтернативная реализация
trait Issue {
def details: ...
def logic: ...
def toSimpleView: ...
}
abstract class AbstractIssue extends(source: IssueSource) extends Issue{
val extraDetail: ...
}
Там существует множество различных реализаций AbstractIssue
и на инициализацию вопрос я хочу, чтобы захватить его и положить упрощенное представление о нем в базы данных, а затем вернуть его в код, как обычно. Цель состоит в том, чтобы только поместить его в базу данных после того, как все поля в дочернем классе были инициализированы, а также нужно только написать этот код в AbstractIssue
и Issue
, чтобы избежать поиска всех существующих дочерних элементов Issue
.
Моя кишка реакция на эту проблему, чтобы добавить это к абстрактному конструктору:
abstract class AbstractIssue extends(source: IssueSource) extends Issue{
val extraDetail: ...
Future { Thread.sleep(2000) }.foreach(_ => InsertIssue(this.toSimpleView)) }
}
К сожалению, это ужасный способ сделать это, и я изо всех сил, чтобы придумать с чистым раствором. У кого-нибудь есть идеи?
Авось DelayedInit, который позволяет вам делать то, что вам нравится с инициализаторе. Возможно, вам нужен трюк, чтобы знать, когда ваш объект готов. –
К сожалению, DelayedInit устарел AFAIK. Но да, если я смогу найти способ сообщить, когда все необходимые поля готовы, я мог бы просто сделать Будущее, которое ждет до тех пор. – Ophirr
Вы можете заставить 'toSimpleView' возвращать тип' Future' типа 'def toSimpleView: Task [ ???] 'или' def toSimpleView: Future [???] '. Метод (или что-то еще в вашем конкретном классе) может затем выполнить обещание, когда он был полностью инициализирован. Тем не менее, это выглядит очень плохой дизайн! Пожалуйста, подумайте над перемещением 'InsertIssue' вне« AbstractIssue »и пусть тот, кто ответственен за создание проблем, решает, хочет ли он поместить их в БД. – valenterry