> в позе раком была как раз девушка, а не программирующий чувак, так что все нормально. А с дотнетом было бы как раз наоборот - парень долбил бы клавиши раком на месте девушки, а вместо девушки его бы ссади жарил 40калетний потный мужик в костюме и очках из ролика I'm PC
Причем тут твоя говноссылочка до того, что в Java generics построены на костыле type erasure и являются source-only синтаксическим сахаром, а в .NET они поддерживаются виртуальной машиной.
boxing/unboxing есть везде. Только в .NET человек специально написал
int i = 4;
object b = i;
Аналогичное можно сделать в Java.
С другой стороны в .NET List<int> - это и есть List<int>, а в Java List<int> нету, есть List<Integer>, который превращается компилятором в List of Object, тоесть обычный List. И потом все тормозит. Занавес.
И если ничего не понимаешь, то перед тем как брызгать слюной, читай википедию
C# allows generics directly for primitive types. Java, instead, allows the use of boxed types as type parameters (e.g., List<Integer> instead of List<int>), but this comes at a small cost since all such values need to be heap-allocated (however, a generic type can be specialized with an array type of a primitive type in Java, for example List<int[]> is allowed).
Причем тут твоя говноссылочка до того, что в Java generics построены на костыле type erasure и являются source-only синтаксическим сахаром, а в .NET они поддерживаются виртуальной машиной.
Потому что ты сваливаешь совершенно несвязные вещи в одну мусорку и делаешь из этого какие-то выводы. Между type erasure и boxingом связь абсолютно никакая. Что выдает что ты просто не понимаешь о чем говоришь.
Боксинг (и как твой вывод «тормоза») происходит совсем не потому что существует type erasure. А потому java не позволяет в качестве параметров типов - примитивы. В .NET примитивы отсутствуют в том смысле что в жабе - они там существуют как компиляторная оптимизация. Приблизительно так же реализовано в Scala где Int это «type alias» и является instanceof AnyVal (в дотнете это звучит как ValueType, а int это type alias на Int32). При чем сам box/unbox в дотнете это CIL инструкция. А в jvm таких нет.
С другой стороны в .NET List<int> - это и есть List<int>, а в Java List<int> нету, есть List<Integer>, который превращается компилятором в List of Object, тоесть обычный List. И потом все тормозит. Занавес.
Ты опять смешал две абсолютно несвязные фичи. Боксинг сделан для удобства пользования параметризованными типами в условиях когда не поддерживается параметризация примитивами.
Вот тебе пример на скале:
class A[@specialized(Int) T <: AnyVal] {
var v: T = _
def set(t:T) = v = t
def get = v
}
object X {
def main(s:Array[String]) = {
val a = new A[Int]
a.set(1)
println(a.get + 1)
}
}
Конечно хреново что они генерики так реализовали (с type erasure и без поддержки vm) но ты несешь вообще бред на счет «тормозов из-за боксинга в котором виноват erasure». Не хочешь чтобы были боксинги - используй специализированные коллекции. Или пользуйся языком который умеет специализацию компилятором - scala.