тупые вопросы по C#
для того же, но не то же.
А я Java есть generics? Если есть, то насколько они похожи на C# generics?
нет
нетНет или не похожи, ты бы уточнил.
А я Java есть generics? Если есть, то насколько они похожи на C# generics?в Java 1.5 и выше generics есть. Они являются чистым синтаксическим сахаром — в рантайме нельзя отличить generic класс от обычного. В .net же мы в рантайме можем отличать. Поэтому в Java возможна такая вещь:
int sum(List<Integer> list)
{
int result = 0;
for (Integer item : list) {
result += item;
}
return result;
}
List<Integer> list = new ArrayList<Integer>
list.add(3);
list.add(4);
List<String>Object)list.add("lala"); //тут Java все проглотит
System.out.println(sum(list; //А тут навернется, т.к. не будет ждать такой подлянки -- String в List<Integer>
зато по-моему в Java для добавления женериков не потребовалось вносить изменений в рантайм
зато по-моему в Java для добавления женериков не потребовалось вносить изменений в рантаймчто значит "зато"?
это плюс что ли? или это по сравнению с чем-то?
в сишарпе оно изначально было, значит явно не с ним сравнение
а плюсом это назвать как то странно
для того же, но не то же.Нееет!
В Java Integer это заплатка для решения "деткой болезни" джавы (разделение на примитивные и на объектные типы). В C# такой болезни нет.
В джава int это не Object, а в C# всё Object!
Nalluble типы ввели во втором фрайсворке. Nalluble<int>используются там, где нужен int, но возможна ситуация, когда значение не определено.
в сишарпе оно изначально было, значит явно не с ним сравнениев том-то и дело, что в .NET 1.1 женериков не было
в C# всё Objectтогда зачем nullable?
почему бы не писать
int a;
if(a == null)
...
?
в том-то и дело, что в .NET 1.1 женериков не былону значит .net 1.1 не нужно считать
джаву 1 тоже же никто не считает, все джаву 2 всегда подразумевают
первый блин комом
int? FindMaxOddNumber(int[] values)
{
int? result = null;
foreach (int value in values)
{
if (value % 2 == 1 && (result == null || result < value
{
result = value;
}
}
return result;
}
Тогда у нас есть два варинта: число найдено, возвращено значение; число не найдено, возвращен null;
В Java тут бы использовался Integer, в этом смысле я и сказал "для того же".
тогда зачем nullable?почитай про различие value type и reference type. Value types не могут принимать значение null, вместо этого они принимают default(T которое равно значению со всему нулевыми полями.
почему бы не писать
int a;
if(a == null)
...
?
ну значит .net 1.1 не нужно считатькак это не нужно? Проги-то на нём писали, и довольно долго. Вот 1.0 - действительно не надо считать.
получается что int это все таки не object
но может быть приведен к object рантаймовским автобоксингом
встречал людей утверждавших что автобоксинг зло, от рантаймовского автобоксинга их наверна бы вырвало
встречал людей утверждавших что автобоксинг злоаргументация?
забоксенная величина много места в памяти занимает?
Забоксенные структуры обычно не переживают нулевого поколения и отлично собираются GC. Памяти они не так уж и много занимают.
забоксенная величина много места в памяти занимает?Кажися, на 8 байт больше, чем сам объект (на 32-битной платформе). Т.е. забоксенный инт в три раза больше того, что в стеке.
да я собственно не спрашивал (сам знаю вопрос был, годится ли это в качестве недостатка
зато по-моему в Java для добавления женериков не потребовалось вносить изменений в рантаймДа в шарпе в общем-то тоже изменения, насколько я понимаю, касаются только сурового рефлекшена с динамической генерацией классов.
Так-то всё компилятор делает и отдаёт рантайму уже инстанцированные классы с забавными именами.
Кстате, нуллаблы на самом деле ужасно кривые. Int? и прочие базовые классы работают нормально, а вот "SomeStruct? а;" приводит к необходимости писать "a.Value.x = 11;", например. Потому что a в результате имеет тип банально Nullable<SomeStruct>, а вовсе не что-то правильное и удобное.
То есть это что-то непонятное, с одной стороны похоже на совсем-совсем простой и неинтересный синтаксический сахар, с другой — нуллабл инты всё-таки можно складывать, значит, они поддерживают операторы самих интов. Странная штука, короче.
Оставить комментарий
pitrik2
я джавист, c# не знаюбуду задавать тута тупые вопросы
nullable классы, это тоже самое что у нас обертки типа int/Integer?