Подтвердить что ты не робот

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

В основном работая с С#, я склонен думать о функциях С#, которые недоступны на Java. После активной работы с Java за последний год я начал открывать функции Java, которые, как мне хотелось бы, были на С#. Ниже приведен список тех, о которых я знаю. Может ли кто-нибудь подумать о других функциях языка Java, которые человек с фоном С# не может реализовать?

Статьи http://www.25hoursaday.com/CsharpVsJava.html и http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp дайте очень обширный список различий между Java и С#, но мне интересно, пропустил ли я что-нибудь в (очень) длинных статьях. Я также могу вспомнить одну особенность (ковариантный тип возврата), которую я не видел в обеих статьях.

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

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

  • Перечисления - это классы - перечисление представляет собой полный класс в java, а не оболочку вокруг примитива, например, в .Net. Java позволяет вам определять поля и методы для перечисления.

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

  • Проверенные исключения - я вижу, как это полезно в контексте общих проектов, используемых с Java-приложениями, но мой опыт работы с .Net заставил меня привыкнуть использовать исключения только для неустранимых условий. И.Е. исключения указывают на ошибку в приложении и попадают только в целях ведения журнала. Я не совсем понял идею использования исключений для нормального потока программы.

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

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

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

4b9b3361

Ответ 1

Генераторы Java допускают маскировку типа. Например, <T extends Object & Comparable<? super T>> T Collections.max(Collection<? extends T>) { ... } не выражается в С#.

Ответ 2

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

Ответ 3

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

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


165. Fun:)

Ответ 4

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

Ответ 5

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