Здравствуйте, mkizub, Вы писали:
M>Посмотри на код, генерируемый Scala и ужаснись.
Покажи... вот честно, интересно... а то пока только пугаешь (есть там конечно кривости, но как это сделать иначе я тоже не сильно представляю)
M>Или вот, пусть мне нужны параметры типов в рантайме. Чтоб я мог написать
M>List<String> ls = ...;
M>String[] arr = ls.toArray();
M>а не
M>String[] arr = ls.toArray(new String[ls.size()]);
Вообще-то разработчику vm должно быть стыдно, если он не знает почему именно требуется объект массива
на scala это решается безо всяких прыжков:
scala> val ls = 1 :: 2 :: Nil
ls: List[Int] = List(1, 2)
scala> ls.toArray
unnamed1: Array[Int] = [I@4854f6 << обрати внимание, что тут именно нейтив массив, а не boxed
Код в самой скала самый обычный:
override def toArray[B >: A]: Array[B] = {
val result = new Array[B](size)
copyToArray(result, 0)
result
}
Другой вопрос, когда мы хотим что-то такое, но это уже спасибо блин erasure...
class MyType[T] {
def oops = new T()
}