Лучший способ на самом деле собрать Java-ME для парня C #

Недавно я начал разрабатывать приложения для Blackberry. Следовательно, мне пришлось перейти на Java-ME и узнать об этом и связанных с ним инструментах. Синтаксис прост, но у меня все время возникают проблемы с различными ошибками и средой.

Например, что-то, что меня удивило и потратило много времени, – это отсутствие реальных свойств объекта classа (что я предположил, что все языки ООП были). Есть много ошибок. Я был в разных местах, где они сравнивают синтаксис Java с C #, но, похоже, нет сайтов, которые рассказывают о вещах, которые нужно учитывать при переходе на Java.

Окружающая среда – это еще одна проблема. Интеллектуальная среда Blackberry просто ужасна. Внешний вид напоминает мне Borland C ++ для Windows 3.1 – он устарел. Некоторые из других проблем include в себя пятнистое intellisense, слабую отладку и т. Д. У Blackberry есть бета-версия плагина Eclipse, но без поддержки отладки это просто редактор с причудливыми инструментами рефакторинга.

Итак, какие-либо советы о том, как вписаться в Java-ME?

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

Gotcha # 10 – Дайте мне свой стандартный выход!

Чтобы напечатать стандартный вывод в Java:

System.out.println("Hello"); 

Gotcha # 9 – Пространства имен == Свобода

В Java у вас нет свободы пространств имен. Структура папок вашего classа должна соответствовать имени пакета. Например, class в пакете org.test должен находиться в папке org / test

Gotcha # 8 – Что случилось с супер?

В Java, чтобы ссылаться на суперclass, вы используете зарезервированное слово super вместо base

Gotcha # 7 – Цепочки-конструкторы к базовому конструктору

У вас этого нет в Java. Вы должны вызвать конструктор самостоятельно

Gotcha # 6 – Dagnabit, как я могу подclassифицировать существующий class?

Для подclassа classа в Java выполните следующее:

 public class A extends B { } 

Это означает, что class A является подclassом classа B В C # будет class A : B

Gotcha # 5 – Почему константы не остаются постоянными?

Чтобы определить константу в Java, используйте ключевое слово final вместо const

Gotcha # 4 – Где ArrayList , Vector или Hashtable ?

Наиболее используемыми структурами данных в java являются HashSet , ArrayList и HashMap . Они реализуют Set , List и Map . Конечно, есть еще больше. Подробнее о коллекциях

Gotcha # 3 – из аксессуаров и мутаторов (Getters and Setters)

У вас нет объектов свойств на Java. Вы должны объявлять методы get и sets для себя. Конечно, большинство IDE могут сделать это автоматически.

Gotcha # 2 – Не могу ли я переопределить !?

Вам не нужно объявлять метод virtual в Java. Все методы – кроме объявленных final – могут быть переопределены в Java.

И № 1 получил …

В Java примитивные типы int , float , double , char и long не являются Object S как в C #. Все они имеют соответствующее представление объектов, например Integer , Float , Double и т. Д.

Вот и все. Не забудьте увидеть исходную ссылку , есть более подробное обсуждение.

Java существенно не отличается от C #. На чисто синтаксическом уровне, вот некоторые указатели, которые могут помочь вам в течение дня:

  1. В Java у вас есть два семейства исключений: java.lang.Exception и все, что вытекает из него, и RuntimeException . Это имеет смысл, потому что в Java исключения проверяются ; это означает, что для того, чтобы выбросить любое исключение без выполнения, вам также нужно добавить аннотацию throws к объявлению метода. Следовательно, любой метод, использующий ваш, должен будет поймать это исключение или объявить, что он также выдает одно и то же исключение. Множество исключений, которые вы считаете само собой разумеющимися, например NullPointerException или IllegalArgumentException , на самом деле происходят из RuntimeException и поэтому вам не нужно их объявлять. Проверенные исключения – это точка раздора между двумя дисциплинами, поэтому я рекомендую вам попробовать их самостоятельно и посмотреть, помогает ли это вам или вас раздражает. На личном уровне я считаю, что проверенные исключения значительно улучшают кодовое факторинг и надежность.

  2. Хотя Java поддерживает автооблок в течение довольно долгого времени, по-прежнему существует довольно много различий между реализациями C # и Java, о которых вы должны знать. Если в C # вы можете взаимозаменяемо использовать int как тип значения и ссылочный тип, в Java они буквально не являются одним и тем же типом: вы получаете примитивный тип значения int и ссылочный тип библиотеки java.lang.Integer . Это проявляется двумя обычными способами: вы не можете использовать типы значений в качестве типичного параметра типа (так что вы будете использовать ArrayList вместо ArrayList ), а методы утилиты (например, parse или toString ) статически реализуется в ссылочном типе (так что это не int a; a.toString(); а int a; Integer.toString( a ); ).

  3. Java имеет два разных типа вложенных classов, у C # – только один. В Java статический class, который не объявлен с помощью static модификатора, называется внутренним classом и имеет неявный доступ к экземпляру охватывающего classа. Это важный момент, потому что, в отличие от C #, Java не имеет понятия делегатов, а внутренние classы очень часто используют для достижения такого же результата при относительно небольшой синтаксической боли.

  4. Дженерики на Java реализованы совершенно иначе, чем C #; когда генерические разработки были разработаны для Java, было решено, что изменения будут чисто синтаксическими без поддержки времени выполнения, чтобы сохранить обратную совместимость со старыми виртуальными машинами. При отсутствии поддержки прямых дженериков во время выполнения Java реализует дженерики с использованием метода, называемого стиранием типов . Существует немало недостатков для стирания стилей над реализацией C # для генерических генераторов, но наиболее важным моментом в этом является то, что параметризованные общие типы в Java не имеют разных типов времени выполнения . Другими словами, после компиляции типы ArrayList и ArrayList эквивалентны . Если вы сильно работаете с дженериками, вы столкнетесь с этими различиями намного раньше, чем вы думаете.

Есть, на мой взгляд, три самых сложных аспекта языка для разработчика C #. Помимо этого существуют средства разработки и библиотека classов.

  1. В Java существует прямая корреляция между пакетом (namespace), именем classа и именем файла. В общем корневом каталоге classы com.example.SomeClass и org.apache.SomeOtherClass будут буквально найдены в com/example/SomeClass.class и org/apache/SomeOtherClass.class соответственно. Будьте осторожны, пытаясь определить несколько classов в одном файле Java (это возможно для частных classов, но не рекомендуется) и придерживаться этой структуры каталогов, пока вы не будете более комфортно работать с средой разработки.

  2. В Java у вас есть понятия class-path и class-loader, которые нелегко сопоставлять с C # (есть приблизительные эквиваленты, которые не используются большинством разработчиков .NET). Classpath сообщает виртуальной машине Java, где должны быть найдены библиотеки и classы (как ваши, так и общие библиотеки системы!), И вы можете думать о загрузчиках classов как о контексте, в котором живут ваши типы. Кластерные загрузчики используются для загрузки типов (файлов classов) из разных мест (локальный диск, интернет, файлы ресурсов и многое другое), но также ограничивают доступ к этим файлам. Например, сервер приложений, такой как Tomcat, будет иметь загрузчик classов для каждого зарегистрированного приложения или контекста; это означает, что статический class в приложении A не будет таким же, как статический class в приложении B, даже если они имеют одинаковое имя и даже если они имеют одну и ту же базу кода. AppDomains предоставляют несколько схожие функции в .NET.

  3. Библиотека classов Java похожа на BCL; многие различия являются косметическими, но этого достаточно, чтобы заставить вас работать для документации (и / или Google) снова и снова. К сожалению, я не думаю, что здесь можно что-то сделать – вы просто будете разбираться в библиотеках по мере их поступления.

Итог: единственный способ grok Java – использовать его. Кривая обучения не крутая, но готовьтесь удивляться и расстраиваться довольно часто в течение первых двух-трех месяцев использования.

Короткий ответ – это будет раздражать, но не сложно.

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

Если вы говорите о свойствах classа, у Java есть такие. Синтаксис

 public class MyClass { public static int MY_CLASS_PROPERTY = 12; } 

Я бы серьезно предложил вам получить лучшую IDE. Любой из Netbeans, Eclipse, IDEA, JBuider собирается сделать ваш переход намного приятнее.