Учитывая черта MyTrait
:Как смешивать черту с примером?
trait MyTrait {
def doSomething = println("boo")
}
может быть смешан в класс с extends
или with
:
class MyClass extends MyTrait
Он также может быть смешано на инстанцировании новый экземпляр:
var o = new MyOtherClass with MyTrait
o.doSomething
Но ... может ли черта (или любое другое, если это имеет значение) добавляться к существующим ins стояние?
Я загружаю объекты с использованием JPA в Java, и я хотел бы добавить к ним некоторые функции, используя черты. Это вообще возможно?
Я хотел бы быть в состоянии смешать в черте следующим образом:
var o = DBHelper.loadMyEntityFromDB(primaryKey);
o = o with MyTrait //adding trait here, rather than during construction
o.doSomething
Это очень полезная фетрика, когда вы определили метод с 'implicit' и импортируете этот метод в свою область действия, этот метод может помочь вам передать объект, который указывает аргументом метода другому объекту, который указывает методом return, когда вы необходимо вызвать метод последнего, который не определен в первом. –
Очень приятное решение, мне оно нравится. Интересно, как легко это можно было бы сделать общим? Возможно, добавьте общий параметр в '::' в объект 'MyTrait', чтобы он мог работать для любого типа. Можно ли также заставить работать с произвольными чертами, которые мы хотим смешивать ...? – axel22
@ axel22 да, я думаю, это можно сделать родовым, как мой обновленный ответ. но я не могу заставить его работать с произвольной чертой, я новичок в scala. –