Ręcznie zamieniam kod z Javy (1.6) na C# i znajduję pewne trudności z zachowaniem się prymitywów (int i double). W języku C# wydaje się, że prawie wszystkie konwersje zdarzyć automatycznieCzy autoboxing i unboxing zachowują się inaczej w Javie i C#
List<double> list1 = new List<double>(); // legal, C#
double d0 = 3.0;
list1.Add(d0); // legal, C#
Double dd = 2.3f; // legal, C#
list1.Add(dd); // legal, C#
List<Double> list2 = new List<Double>(); // legal, C#
double d1 = 3.0;
list2.Add(d1); // legal, C#
list2.Add(2.0); // legal, C#
double d2 = list2.get(0); // legal, C#
ale w Javie tylko niektóre mogą
List<double> list1 = new ArrayList<double>(); // illegal, Java
List<Double> list2 = new ArrayList<Double>(); // legal, Java
double d1 = 3.0;
list2.add(d1); // legal, Java
list2.add(2.0); // legal, Java
double d2 = list2.get(0); // legal, Java
Byłbym wdzięczny za systematyczną analizę różnic i wszelkich podstawowych przesłankach.
Miałem wrażenie, że lista istniała na długo przed wpisaniem Erasure w Javie, czy też nie rozumiem, o czym mówisz? –
RHSeeger
@RHSeeger, lista to rodzajowy typ. Generics w Javie, gdzie/są realizowane z Type Erasure. Oznacza to, że List nie istniał przed usunięciem typu (przynajmniej z parametrami typu). Zauważ, że lista zostanie przetłumaczona na listę typu surowego. –