Как видно из названия --- Я начинаю с java .util.List производных типов. (У всех Scala коллекций есть newBuider (), но, конечно, у Java коллекций нет.) У меня пока go:
case class JavaListBuilder[A,To](constructor: Constructor[To]) extends mutable.Builder[A, To] {
private val internal = mutable.ListBuffer.empty[A]
def addOne(elem: A): this.type = {
internal.addOne(elem)
this
}
def clear(): Unit = internal.clear
def result(): To = constructor.newInstance(internal.result.asJava)
}
def buildTheBuilder[T,TO](t: Class[T], to: Class[TO]): mutable.Builder[T,TO] = {
val constructor = to.getConstructor(Class.forName("java.util.Collection"))
JavaListBuilder[T,TO](constructor)
}
val a = java.lang.Integer.valueOf(5)
val t = new java.util.ArrayList[java.lang.Integer]
val jlb = buildTheBuilder(a.getClass, t.getClass)
jlb.addOne(java.lang.Integer.valueOf(1))
jlb.addOne(java.lang.Integer.valueOf(2))
jlb.addOne(java.lang.Integer.valueOf(3))
println(jlb.result)
Это дает мне эту ошибку :
[error] /Users/wmy965/git/sj_blog/src/main/scala/co.blocke.blog/Lab.scala:33:41: type mismatch;
[error] found : Integer
[error] required: T
[error] jlb.addOne(java.lang.Integer.valueOf(1))
Так что насчет типов это не радует. Есть ли лучший способ выполнить sh то, что я пытаюсь сделать?