blob: 44b1febd8b7efb1fc4b73ba7ec200aa295567b94 (
plain) (
tree)
|
|
object Serialize {
@throws(classOf[java.io.IOException])
def write[A](o: A): Array[Byte] = {
val ba = new java.io.ByteArrayOutputStream(512)
val out = new java.io.ObjectOutputStream(ba)
out.writeObject(o)
out.close()
ba.toByteArray()
}
@throws(classOf[java.io.IOException])
@throws(classOf[ClassNotFoundException])
def read[A](buffer: Array[Byte]): A = {
val in =
new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(buffer))
in.readObject().asInstanceOf[A]
}
}
@serializable
@SerialVersionUID(1L)
class VarModel[T]( getter: => T, setter: T => Unit )
{
Serialize.write(getter)
Serialize.write(setter)
def this( getter: => T ) = this( getter, null )
def getObject: AnyRef = getter.asInstanceOf[AnyRef]
def setObject( v: AnyRef ) = {
if( setter==null )
throw new RuntimeException( "Tried to set readonly model!")
setter( v.asInstanceOf[T] )
}
def detach = ()
}
@serializable
@SerialVersionUID(1L)
class Printer( p: VarModel[String] ) {
def print = println( p.getObject );
}
class Component extends Marker { }
class Form extends Component { }
@serializable
@SerialVersionUID(1L)
class Main {
var pass = "pass"
def main(args : Array[String]) : Unit = {
val f = new Form {
val p = new Printer( new VarModel( pass, s => pass = s ) );
p.print
}
()
}
}
object Test {
def main(args: Array[String]) {
(new Main).main(Array[String]())
}
}
|