Главным образом работая с C#, я склонен думать с точки зрения функций C#, которые не доступны в Java. После работы экстенсивно с Java за прошлый год, я начал обнаруживать функции Java, которых я желаю, были в C#. Ниже список тех, что я знаю. Кто-либо может думать о других функциях языка Java, которые не может понять человек с фоном C#, существует?
Статьи http://www.25hoursaday.com/CsharpVsJava.html и http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp дают очень обширный список различий между Java и C#, но интересно, пропустил ли я что-нибудь в (очень) длинных статьях. Я могу также думать об одной функции (ковариантный тип возврата), который я не видел упомянутый ни в одной статье.
Ограничьте ответы на язык или опции оперативной библиотеки, которые не могут быть эффективно реализованы Вашим собственным кодом или сторонними библиотеками.
Ковариантный тип возврата - метод может быть переопределен методом, который возвращает более определенный тип. Полезный при реализации интерфейса или расширении класса и Вы хотите метод переопределения возвратить тип, более характерный для Вашего класса. Это может быть моделировано с помощью явной интерфейсной реализации в C#, но нет никакого простого эквивалента при переопределении методов класса.
Перечисления являются классами - перечисление является полным классом в Java, а не оберткой вокруг примитива как в .NET. Java позволяет Вам определять поля и методы на перечислении.
Анонимные внутренние классы - определяют анонимный класс, который реализует метод. Хотя большинство вариантов использования для этого в Java перепето делегатами в .NET, существуют некоторые случаи, в которых действительно необходимо передать несколько обратных вызовов как группа. Было бы хорошо иметь выбор использования анонимного внутреннего класса.
Контролируемые исключительные ситуации - я вижу, как это полезно в контексте общих умыслов, используемых с JAVA-приложениями, но мой опыт с .NET поместил меня в привычку к использованию исключений только для неисправимых условий. Т.Е. исключения указывают на ошибку в приложении и только пойманы в целях входа. Я не вполне возвратился к идее использовать исключения для нормального процесса выполнения программы.
strictfp - Гарантирует строгую арифметику с плавающей точкой. Я не уверен, какое применение нашло бы это полезным.
поля в интерфейсах - возможно объявить поля в интерфейсах. Я никогда не использовал это.
статический импорт - Позволяет использовать статические методы класса, не квалифицируя его с именем класса. Я просто понял сегодня, что эта функция существует. Это походит на хорошее удобство.
Универсальные шаблоны Java допускают подстановочные знаки типов. Например,
не может быть выражен в C #.
В Java есть пакеты, отражающие иерархию и структуру файловой системы, тогда как в C # сборки не зависят от пространства имен иерархия.
Я не знаю, хотите ли вы этого на своем языке, но я думаю, что Type Erasure можно рассматривать как особенность для некоторых.
Восьмериальные литералы! :D
int x = 0245; System.out.println(x);
165 выводится. Веселый :)
В C # вы не можете иметь оператор return в блоке finally.