dado un rasgo MyTrait
:¿Cómo mezclar un rasgo con una instancia?
trait MyTrait {
def doSomething = println("boo")
}
se puede mezclar en una clase con extends
o with
:
class MyClass extends MyTrait
También se puede mezclar a una instancia de una nueva instancia:
var o = new MyOtherClass with MyTrait
o.doSomething
Pero ... puede el rasgo (o cualquier otro si eso hace la diferencia) ser agregado a un ins existente tance?
Estoy cargando objetos usando JPA en Java y me gustaría agregarles algunas funcionalidades usando rasgos. ¿Es posible?
me gustaría ser capaz de mezclar en un rasgo de la siguiente manera:
var o = DBHelper.loadMyEntityFromDB(primaryKey);
o = o with MyTrait //adding trait here, rather than during construction
o.doSomething
Esta es una característica muy útil, cuando definiste un método con 'implícito', e importas este método en tu alcance, este método puede ayudarte a transferir el objeto que especifica por el argumento del método a otro objeto que especifica por el método return cuando necesita invocar el método de este último que no está definido en el primero. –
Muy buena solución, me gusta. Me pregunto cuán fácilmente podría hacerse genérico, probablemente agregar un parámetro genérico a '::' en el objeto 'MyTrait' podría permitir que funcione para cualquier tipo. ¿Podría también hacerse funcionar con rasgos arbitrarios que queremos mezclar ...? – axel22
@ axel22 sí, creo que se puede hacer genérico como mi respuesta actualizada. pero no puedo hacerlo para trabajar con rasgo arbitrario, soy un novato para scala. –