Обратите внимание, что это не аргумент Java против C #. Я программист на Java без опыта C #, просто из любопытства.
Я немного читал на C #, и, похоже, в нем гораздо больше возможностей, чем в Java. Ряд примеров:
- Тип вывода.
dynamic
ключевое слово.- Делегаты.
- Необязательные параметры.
- Лямбда и LINQ (на самом деле я понятия не имею, что это).
- Свойства.
Однако в Java нет ничего такого, чего нет у C #.
Мой вопрос: почему C # имеет гораздо больше нативных функций, чем Java? И почему Java не добавляла некоторые из них в течение многих лет, например, Свойства или вывод типа? Разработчики языка Java используют более упрощенный подход? Что является причиной этого?
Ответы:
Некоторые причины:
В результате у Java теперь есть небольшой пробел в функциональности. У него большие планы на будущее, но, как обычно, с такими вещами все занимает немного больше времени, чем планировалось.
источник
Я бы добавил к ответу Килиана, что одно большое различие между Java и C # заключается в том, что разработчики C # контролируют не только язык, но и стандартную среду IDE.
Добавление чего-то вроде методов расширения и частичных классов может стать кошмаром при разработке версий управления / контроля, если IDE не будут должным образом поддерживать его.
Поскольку от вас ожидают, что вы сможете скомпилировать Java с выбранной вами платформой (Eclipse, Netbeans, vi + Ant), добавить функции, которые нарушают код (и использовать их для разработки дополнительных расширений, таких как LINQ), гораздо сложнее, чем просто сказать " Поскольку IntelliSense будет заниматься этими случаями, нам не о чем беспокоиться ».
Кроме того, иногда стоит отметить ценность функций, а не их количество. Например, автоматические свойства хороши, и я, конечно, хотел бы, чтобы Java поддерживал это, но, в конце концов, это означает, что вам нужно написать еще несколько строк кода на Java. Точно так же я нахожу, что называть «События» функцией не совсем правильно, так как они представляют собой не что иное, как специально помеченные делегаты, и являются просто уточненной копией шаблона Observer, уже используемого Java (опять же, в Java требуется более явный кодирование)
Не поймите меня неправильно, я думаю, что C # представил несколько примечательных нововведений, и я хочу, чтобы когда-нибудь большие боссы Oracle проснулись и запустили настоящую «Java 2», чтобы включить некоторые из них, но разрыв не так очевиден, как ваш вопросы
источник