summaryrefslogblamecommitdiff
path: root/test/files/jvm/manifests.scala
blob: 61c515228373c852ec6f310b22df643b93e68ca4 (plain) (tree)




























































                                                                    
object Test extends Application {
  import scala.reflect._

  def manifestOf[T](implicit m: Manifest[T]): Manifest[T] = m

  def print[T](x: T)(implicit m: Manifest[T]) {
    val m1: Manifest[T] = Serialize.read(Serialize.write(m))
    val x1 = x.toString.replaceAll("@[0-9a-z]+$", "")
    println("x="+x1+", m="+m1)
  }
  print(())
  print(true)
  print('a')
  print(1)
  print("abc")

  print(List(()))
  print(List(true))
  print(List(1))
  print(List("abc"))

  //print(Array(()))  //Illegal class name "[V" in class file Test$
  print(Array(true))
  print(Array('a'))
  print(Array(1))
  print(Array("abc"))

  print(((), ()))
  print((true, false))
  print((1, 2))
  print(("abc", "xyz"))

  print(Serialize)
  print(Test)
  print(List)

  class Foo[T](x: T)
  print(new Foo(2))
  print(new Foo(List(2)))
  print(new Foo(new Foo(2)))
  print(new Foo(List(new Foo(2))))

  trait Bar[T] { def f: T }
  print(new Bar[String] { def f = "abc" })
}

object Serialize {
  import java.io._
  def write[A](o: A): Array[Byte] = {
    val ba = new ByteArrayOutputStream(512)
    val out = new ObjectOutputStream(ba)
    out.writeObject(o)
    out.close()
    ba.toByteArray()
  }
  def read[A](buffer: Array[Byte]): A = {
    val in = new ObjectInputStream(new ByteArrayInputStream(buffer))
    in.readObject().asInstanceOf[A]
  }
}