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

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

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

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

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

Ответ 1

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

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

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

System.out.println("Hello");

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

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

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

В Java для ссылки на суперкласс вы используете зарезервированное слово super вместо base

Gotcha # 7 - Связывание конструкторов с базовым конструктором

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

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

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

public class A extends B {
}

Это означает, что класс A является подклассом класса B. В С# будет 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 похожими на С#. Все они имеют соответствующее представление объектов, например Integer, float, double и т.д.

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

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