Какие функции должна быть в Java 7 и выше для стимулирования перехода с C #? [закрыто]

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

24
задан NT_ 20 October 2009 в 14:15
поделиться

24 ответа

Как разработчику .NET / C #, вот недостающие функции, которые меня раздражают. Этот список в произвольном порядке - как раз когда приходят мысли:

  1. Библиотека Java слишком мала. Для обычных вещей мне приходится выбирать между 5 конкурирующими продуктами с открытым исходным кодом, потому что базовой библиотеки не хватает во многих отношениях.
  2. Это объектно-ориентированный язык программирования, верно? Почему, черт возьми, примитивные типы не наследуются от «объекта»?
  3. Указатели
  4. Лямбды
  5. Замыкания
  6. Частичные классы и, в меньшей степени, частичные методы
  7. Реальная поддержка обобщений
  8. Использование операторов и Dispose - для меня это был настоящий чушь. Вам действительно нужно явно закрывать соединения в блоках try / catch. Бедные ява парни!
  9. Возврат доходности было бы неплохо
  10. Целые числа без знака - опять WTF? С какой целью мне снова приходится использовать числовые типы больше, чем мне нужно?
  11. В Java вы можете возвращаться из финальных блоков try / catch. Коллега запутал меня на несколько часов, введя таким образом ошибку. Такое поведение должно быть запрещено, как в C #.

Мне редко приходится использовать Java, и когда я это делаю, у меня возникают всевозможные моменты WTF.

Правка: Я удален для каждого комментария, так как он больше не используется. функция Java отсутствует с версии 1.5.

33
ответ дан 28 November 2019 в 22:06
поделиться

Я нигде не вижу смысла «заманивать» кого-либо. Они решают разные проблемы, и вы должны использовать то, что вам подходит.

В Java меньше «Языка» и меньше структур для привлечения новых людей, она независима от платформы и не меняется слишком быстро, позволяя старому коду задерживаться надолго (хорошо для некоторых крупных компаний).

C # имеет тесную интеграцию с рабочим столом и множество приятных функций, которые делают программирование более увлекательным. Он имеет интеграцию .net. У него есть указатели, замыкания и т. Д., Которые усложняют работу с n00bs (допустимая языковая цель, следовательно, базовая), но более интересны для опытных программистов - я не убеждал себя, что эти функции делают вас более продуктивными, но в некоторых ситуациях они могут сделайте ваш код намного приятнее! Также, если вам нужны указатели, вам нужны указатели .

Я не вижу много совпадений в целевой аудитории. Зачем менять язык, чтобы привлекать программистов, если для всей отрасли более полезно иметь два здоровых языка, каждый из которых нацелен на решение разных проблем, привлекая разных разработчиков?

0
ответ дан Bill K 20 October 2009 в 14:15
поделиться
  • 1
    @bharal соглашение о присвоении имен вполне ясно " sqlDate" и " utilDate" (java.sql.Date, java.util.Date). Код компилирует в любом блоке, в котором java.util.Date существует с именем " utilDate". вопрос был о преобразовании даты, подразумевая, что каждый уже существует. – cossacksman 12 February 2017 в 21:16
  • 2
    @bharal соглашение о присвоении имен вполне ясно " sqlDate" и " utilDate" (java.sql.Date, java.util.Date). Код компилирует в любом блоке, в котором java.util.Date существует с именем " utilDate". вопрос был о преобразовании даты, подразумевая, что каждый уже существует. – cossacksman 12 February 2017 в 21:16
  • 3
    @bharal соглашение о присвоении имен вполне ясно " sqlDate" и " utilDate" (java.sql.Date, java.util.Date). Код компилирует в любом блоке, в котором java.util.Date существует с именем " utilDate". вопрос был о преобразовании даты, подразумевая, что каждый уже существует. – cossacksman 12 February 2017 в 21:16
  • 4
    @bharal соглашение о присвоении имен вполне ясно " sqlDate" и " utilDate" (java.sql.Date, java.util.Date). Код компилирует в любом блоке, в котором java.util.Date существует с именем " utilDate". вопрос был о преобразовании даты, подразумевая, что каждый уже существует. – cossacksman 12 February 2017 в 21:16
  • 5
    @bharal соглашение о присвоении имен вполне ясно " sqlDate" и " utilDate" (java.sql.Date, java.util.Date). Код компилирует в любом блоке, в котором java.util.Date существует с именем " utilDate". вопрос был о преобразовании даты, подразумевая, что каждый уже существует. – cossacksman 12 February 2017 в 21:16

linq, лямбда, анонимные типы

0
ответ дан Omu 20 October 2009 в 14:15
поделиться

Они должны начать с исправления классов, относящихся к календарю / дате, даже если кажется, что это слишком много.

1
ответ дан hawk 20 October 2009 в 14:15
поделиться

Давайте проясним, что нам нужно различать Java и JVM. Я на самом деле перешел с C # на Java, но признаю, что это не из-за потрясающих языковых возможностей Java! По моему скромному мнению, C # - лучший язык, а CLR - возможно, более элегантная виртуальная машина. Однако даже с Mono вы не пишете приложения, которые запускаются повсюду!

Я думаю, что лучший аргумент для Java - это удивительное сообщество, которое у нее есть. Именно здесь разрабатывается передовая технология, а не в Sun (сейчас Oracle). Сообщество Java неизменно является лидером в разработке корпоративных технологий. Например, сколько времени понадобилось Microsoft, чтобы предоставить DI Framework? Где АОП в .NET? Когда я запускаю проект .NET, я основываю Spring.NET, порт Java. Когда мне нужен ORM, это NHibernate. Нужна среда тестирования? NUnit. Я понимаю, что существуют другие проекты OSS для платформы .NET, но их количество и поддержка со стороны Microsoft смехотворны по сравнению с сообществом Java.

2
ответ дан Richard Clayton 20 October 2009 в 14:15
поделиться
  • 1
    Я попробовал тот вариант также. Та же ошибка. – Brick 16 May 2016 в 18:44
  • 2
    Я попробовал тот вариант также. Та же ошибка. – Brick 16 May 2016 в 18:44
  • 3
    Я попробовал тот вариант также. Та же ошибка. – Brick 16 May 2016 в 18:44
  • 4
    Я попробовал тот вариант также. Та же ошибка. – Brick 16 May 2016 в 18:44
  • 5
    Я попробовал тот вариант также. Та же ошибка. – Brick 16 May 2016 в 18:44

Я думаю, что выбор между Java и C # - это не вопрос языковых возможностей, а вопрос выбора платформы и экосистемы.

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

В конце концов, в мире JVM есть Scala, и многие разработчики, чувствительные к языку, используют его каким-то образом.

7
ответ дан Vanya 20 October 2009 в 14:15
поделиться

Импульс. Я сделал много разработок на обеих платформах. Мне нравится сторона .NET больше из-за того, как развивается язык C #. Эволюция Java кажется скорее реакцией на C #, чем реальным видением. Поэтому я думаю, что для Java лучше всего игнорировать .NET и создавать что-то новое.

9
ответ дан Mike Two 20 October 2009 в 14:15
поделиться

Я также дам один ответ наоборот. C # нуждается в реализации перечисления, как в Java. Перечисления Java потрясают!

Позвольте мне также добавить анонимные переопределения в этот список. Извините, что ушел от темы, но C # нужна возможность анонимного переопределения методов. Я переключался между Java и C # и должен сказать, что для модульного тестирования унаследованного кода нет ничего лучше, чем переопределение анонимного класса.

10
ответ дан John Sonmez 20 October 2009 в 14:15
поделиться

Я программист на C # и около года назад мне пришлось участвовать в разработке приложения на Java. Больше всего я пропустил:

  • Visual Studio (Eclipse хорош, но VS - VS, особенно Team Edition)
  • Сравнение строк с ==
  • свойствами
  • Базовые типы в качестве объектов первого класса (например, не тип «int» против класса «Integer»)
  • Анонимные методы (обходной путь может быть сделан с использованием анонимных классов, но это не то же самое )
  • LINQ

И была одна особенность Java, которую я упустил, когда вернулся к C #: явное объявление исключений в сигнатурах методов.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я говорю о несколько старом проекте, я не знаю, присутствуют ли некоторые из этих функций в текущих версиях Java.

13
ответ дан Konamiman 20 October 2009 в 14:15
поделиться

в произвольном порядке:

  • функциональные указатели (делегаты); все проходящие интерфейсы вокруг вещи глупы
  • настоящие дженерики ; какой смысл иметь типобезопасные дженерики, если компилятор не может даже хранить метаданные через компиляцию модуля?
  • скорость интерфейса ; все библиотеки пользовательского интерфейса для самостоятельного рисования очень медленны по сравнению с собственными элементами управления, заключенными в «управляемые» библиотеки, не говоря уже о том, что пользовательский интерфейс Microsoft, созданный в автоматическом режиме, аппаратно ускоряется с помощью direct3d
  • и конструкции yield return ; c # настолько удобен для пользователя, что это безумие
  • перегрузка оператора
  • linq ; просто потому, что это так увлекает
  • свойства ; чем больше синктатического сахара, тем вы зависимее от
  • лучше взаимодействует с нативным кодом ; Поддержка p / invoke и нативных com в c # делает взаимодействие таким легким по сравнению с jni -.-
  • типами значений первого класса ; это идет рука об руку с реальными обобщениями, наличие универсальных списков, которые никогда не блокируют / распаковывают в c #, является частью того, почему c # быстрее, чем java.

и я бы сказал, что это самый важный:

  • отзывчивый, информативный отладчик ; ничто не может даже приблизиться к визуальной студии прямо сейчас
16
ответ дан Blindy 20 October 2009 в 14:15
поделиться

Я думаю, вам следует подумать о переводе этой священной войны с «Java vs C #» на «JVM vs CLR», потому что JVM (в последние годы - в основном) не только Java, но также Scala, Groovy, Clojure, JRuby, Jython и дюжина JVM-языков.

5
ответ дан folone 20 October 2009 в 14:15
поделиться

было бы неплохо использовать карту ({codeblock}), которая запускает что-либо итерируемое. И фильтр тоже. И возможность легко возвращать несколько значений из метода.

(a,b,c) = getThreeValues();

(присваивает отдельные переменные a, b и c).

На самом деле я просто думаю, что они должны иметь Haskell в качестве поддерживаемого языка сценариев на JVM: D

0
ответ дан 28 November 2019 в 22:06
поделиться

Я думаю, это зависит от бизнес-решений, а не от самих языков. Но мне очень нравятся лямбды и карри в C #: D: D

http://mikeomatic.net/?p=82

0
ответ дан 28 November 2019 в 22:06
поделиться

Простой способ сопоставить значения в вашей модели с пользовательским интерфейсом (например, bind в Java / FX)

0
ответ дан 28 November 2019 в 22:06
поделиться

Свойства!

Анонимные объекты тоже хороши

3
ответ дан 28 November 2019 в 22:06
поделиться

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

8
ответ дан 28 November 2019 в 22:06
поделиться

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

9
ответ дан 28 November 2019 в 22:06
поделиться

Менее отвратительные инструменты синтаксического анализа и обработки XML. Делать что-либо с XML на Java - отстой .

11
ответ дан 28 November 2019 в 22:06
поделиться

Просто начнем, я думаю, что самое большое, что нужно Java 7, о том, что все жалуются на отсутствие, - это закрытие.

13
ответ дан 28 November 2019 в 22:06
поделиться

По моему опыту, сравнение Java и .Net - это скорее бизнес-решение, чем техническое. Магазины с опытом работы с MS тянутся к .Net, а магазины с опытом Java - к Java и OSS. Я видел мало свидетельств того, что люди меняют язык в зависимости от языковых особенностей. С другой стороны, я видел, как магазины сильно склоняются в сторону одной платформы b / c одного или двух ключевых сотрудников, которых они хотели нанять, будучи хорошо осведомленными в этой области.

20
ответ дан 28 November 2019 в 22:06
поделиться

Support to run over CLR (and vice versa perhaps for JVM) without IKVM and other such layers.

2
ответ дан 28 November 2019 в 22:06
поделиться

Продолжения , такие как Scala (поверх всего остального), тоже подойдут для разработки агентов.

2
ответ дан 28 November 2019 в 22:06
поделиться

С другой стороны, есть ли в .net открытые корпоративные проекты, такие как Terracotta (полукоммерческие), Infinispan, Compass? нет. ncache (коммерческий), lucene.net далеко позади них. Terracotta особенно уникален, он может улучшить некоторые из ваших приложений на 100 раз, он просто идеален и бесплатен (разделение является коммерческим). Если мы реализуем приложение с высокой нагрузкой как в .net с чем угодно, так и в Java с интеграцией terracotta + hibernate + terracotta-hibernate, приложение java, вероятно, будет намного более производительным, чем приложение .net. Есть несколько портов для .net, таких как nhibernate, log4net, lucene.net, но все они пытаются уловить версии java. И entity framework - это катастрофа, они должны начать с nhibernate в качестве основы или извлечь уроки из них.

.net работает только с Windows (моно - это далеко от предприятия, нет t какие-либо предприятия используют его), сколько денег myspace.com потратил на свои 4000 лицензий на веб-сервер Windows? 1 миллион?

Вы не можете установить простой плагин для VS (и не можете делать некоторые другие вещи), если не купите профессиональную версию,

Некоторые типы экземпляров Windows в веб-сервисах Amazon стоят почти в 2 раза меньше, чем Linux-проекты.

Если вы посмотрите на количество проектов Java с открытым исходным кодом ohloh.net (с инструментами сравнения языков), вы увидите, что объем Java в 5 раз больше, чем в C #.

также доля Java в мире составляет 20% в то время как C # имеет% 4.x (источник: tiobe.com)

Посмотрите на самые популярные веб-сайты; только microsoft и myspace используют .net. google, amazon, ebay, linkedin, alibaba, twitter (переключился на scala с рельсов) ... многие из них используют java, а многие другие используют php, ruby ​​(facebook, yahoo, ..

0
ответ дан 28 November 2019 в 22:06
поделиться

Было бы неплохо, если бы нативный "десятичный" тип для Java заменил класс BigDecimal. Но коллекции Java thread-safe хороши.

Возможно, вопрос не столько в том, что нужно Java 7, чтобы убедить разработчиков использовать его, сколько в том, что заставляет разработчиков переходить с языка Enterprise/server-side java на другой, ориентированный только на C# рабочий стол Windows-ориентированный мир?

Для большинства разработчиков язык не сложен в понимании, будь то Java или C#. Я разрабатываю на Java, но Linq не занял много времени, чтобы понять и использовать.

Я думаю, что выбор Java или C# зависит от того, что лично вас мотивирует - может быть, деньги? В этом случае любой язык сделает, имеют ли они определенные возможности или нет.

Ste

.
1
ответ дан 28 November 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: