scala - How to abstract from type of immutable value performing its transformations? -


i want incapsulate real type of immutable solution object in implementation of modifier can’t find way avoid downcasts. how can write listeners independent on type of solution without making them have type parameter?

the following code illustrates downcasts unvoidable if listener unaware concrete type of solution.

 trait solution {} //immutable abstact class  trait listener(val modifier: modifier) {     def onchange(isolution: solution): solution  }  trait modifier { //implementations use different descendants of solution     def addlistener(listener: listener)     def emptysolution: solution     def transfrom1(isolution: solution): solution //downcast of argument can’t avoided in implementations of these     def transfrom2(isolution: solution): solution  }  class listener1 extends listener { //should independent solution concrete type. current implentation meets requirement introducing downcasts in modifier.     val modifier: modifier     def onchange(isolution: solution) = modifier.transform1(modifier.transform2(isolution)) // action involving solution transformations modifier  } 

one possible answer in question - can use abstract types.

here example may you:

trait solution {} trait listener {   val modifier: modifier   def onchange(isolution: modifier.soltype): modifier.soltype } trait modifier {   type soltype <: solution   def addlistener(listener: listener)   def emptysolution: solution   def transform1(isolution: soltype): soltype   def transform2(isolution: soltype): soltype } trait listener1 extends listener {   val modifier: modifier   def onchange(isolution: modifier.soltype) = modifier.transform1(modifier.transform2(isolution)) } 

Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -