Функции языка Java, которые не имеют никакого эквивалента в C#

Главным образом работая с 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#, но интересно, пропустил ли я что-нибудь в (очень) длинных статьях. Я могу также думать об одной функции (ковариантный тип возврата), который я не видел упомянутый ни в одной статье.

Ограничьте ответы на язык или опции оперативной библиотеки, которые не могут быть эффективно реализованы Вашим собственным кодом или сторонними библиотеками.

  1. Ковариантный тип возврата - метод может быть переопределен методом, который возвращает более определенный тип. Полезный при реализации интерфейса или расширении класса и Вы хотите метод переопределения возвратить тип, более характерный для Вашего класса. Это может быть моделировано с помощью явной интерфейсной реализации в C#, но нет никакого простого эквивалента при переопределении методов класса.

  2. Перечисления являются классами - перечисление является полным классом в Java, а не оберткой вокруг примитива как в .NET. Java позволяет Вам определять поля и методы на перечислении.

  3. Анонимные внутренние классы - определяют анонимный класс, который реализует метод. Хотя большинство вариантов использования для этого в Java перепето делегатами в .NET, существуют некоторые случаи, в которых действительно необходимо передать несколько обратных вызовов как группа. Было бы хорошо иметь выбор использования анонимного внутреннего класса.

  4. Контролируемые исключительные ситуации - я вижу, как это полезно в контексте общих умыслов, используемых с JAVA-приложениями, но мой опыт с .NET поместил меня в привычку к использованию исключений только для неисправимых условий. Т.Е. исключения указывают на ошибку в приложении и только пойманы в целях входа. Я не вполне возвратился к идее использовать исключения для нормального процесса выполнения программы.

  5. strictfp - Гарантирует строгую арифметику с плавающей точкой. Я не уверен, какое применение нашло бы это полезным.

  6. поля в интерфейсах - возможно объявить поля в интерфейсах. Я никогда не использовал это.

  7. статический импорт - Позволяет использовать статические методы класса, не квалифицируя его с именем класса. Я просто понял сегодня, что эта функция существует. Это походит на хорошее удобство.

16
задан 2 revs 16 March 2010 в 18:32
поделиться

5 ответов

Универсальные шаблоны Java допускают подстановочные знаки типов. Например, > T Collections.max (Collection ) {...} не может быть выражен в C #.

2
ответ дан 30 November 2019 в 23:00
поделиться

В Java есть пакеты, отражающие иерархию и структуру файловой системы, тогда как в C # сборки не зависят от пространства имен иерархия.

5
ответ дан 30 November 2019 в 23:00
поделиться

Я не знаю, хотите ли вы этого на своем языке, но я думаю, что Type Erasure можно рассматривать как особенность для некоторых.

1
ответ дан 30 November 2019 в 23:00
поделиться

Восьмериальные литералы! :D

int x = 0245; System.out.println(x);


165 выводится. Веселый :)

3
ответ дан 30 November 2019 в 23:00
поделиться

В C # вы не можете иметь оператор return в блоке finally.

2
ответ дан 30 November 2019 в 23:00
поделиться