Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

Java - как вам оно   Найти похожие ветки 

 
Шмелъ   (2006-07-21 11:58) [0]

Закончили проект, и посадили меня изучать Java для развития другого проекта, книгу большую дали. По первым ощущениям - а знаете клево, ни указателей, ни работы с памятью, никаких низкоуровневых операций, сиди пиши себе не думая, классы почти на все случаи жизни имеются к тому же кроссплатформенность - красота. И вот задумался я - это к чему ж все идет-то. Скоро программистам вообще ничего знать не надо будет, и программы будут состоять из 2-х - 5-ти слов. А я тут было думал ассемблер поизучать, архитектуру процессора, туда сюда. ...Костыли для программистов, все более модернизируются?


 
StriderMan ©   (2006-07-21 12:04) [1]

у Java есть обратная сторона медали, и даже не одна! Во первых это интерпретатор, а по сему работает весьма медленно. Во вторых, если уж понадобились низкоуровневые операции, то придется городить велосипед.

А в остальном очень приятный язык. только сдал позиции в последнее время, так и не успев их занять. Даже на мобилках потихоньку сдает позиции в связи с широкой доступностью смартфонов Symbian и WM


 
Чапаев ©   (2006-07-21 12:04) [2]


> это к чему ж все идет-то

Мы все умрём.


> Скоро программистам вообще ничего знать не надо будет, и
> программы будут состоять из 2-х - 5-ти слов.

Скажу по секрету, уже есть опытные образцы таких программистов и таких программ.


 
Шмелъ   (2006-07-21 12:20) [3]


> Мы все умрём


Да! И наступит царствие вселенского, тантрического яйцеобразного мозга с человекоподобными щупальцами, и по земле будут ходить штаноперепела. АПОГЕЙ, барень!


 
iZEN ©   (2006-07-21 12:24) [4]


> StriderMan ©   (21.07.06 12:04) [1]
>
> у Java есть обратная сторона медали, и даже не одна! Во
> первых это интерпретатор, а по сему работает весьма медленно.
>  Во вторых, если уж понадобились низкоуровневые операции,
>  то придется городить велосипед.

Бред.
Бред.

Java работает быстрее C++ и в некоторых случаях быстрее С, поскольку имеет оптимизацию на стадии компиляции в байткод (javac) и на стадии динамической трансляции кода под архитектуру процессора (JIT). Для С/С++ нужна статическая компиляция под архитектуру конкретного процессора, иначе тормоза обеспечены как на i386.

Для исполнения нативного кода городить велосипед не приходится. Есть чётко опредёлённый способ: JNI (Java Native Interface). Через него загружаются и вызываются все динамические библиотеки (.dll, .so).


 
Ketmar ©   (2006-07-21 12:28) [5]

>iZEN ©   (21.07.06 12:24) [4]
точно быстрее? и не на тестовых примерах, а на реальных больших проектах? что ж у меня JIDEA так тормозила-то тогда?


 
Stakan ©   (2006-07-21 12:29) [6]

StriderMan ©   (21.07.06 12:04) [1]
Только сдал позиции в последнее время, так и не успев их занять. Даже на мобилках потихоньку сдает позиции в связи с широкой доступностью смартфонов Symbian и WM

http://www.tiobe.com/tpci.htm


 
isasa ©   (2006-07-21 12:33) [7]

... и программы будут состоять из 2-х - 5-ти слов.

Ну допустим 2 слова я знаю ...
А кто подскажет литературу по 5-ти?


 
Чапаев ©   (2006-07-21 12:35) [8]


> А кто подскажет литературу по 5-ти?

Поступайте, молодой человек, в наш ВУЗ, выучите третье, после аспирантуры будете знать четыре слова. А по пяти... Это не иначе как докторантуру закончить надо.


 
StriderMan ©   (2006-07-21 12:37) [9]


> Java работает быстрее C++ и в некоторых случаях быстрее
> С, поскольку имеет оптимизацию на стадии компиляции в байткод
> (javac) и на стадии динамической трансляции кода под архитектуру
> процессора (JIT).

Вы когда-нибудь сами сравнивали?
А JIT-ускорение помогает в весьма ограниченных случаях! Кстати JIT это же динамический оптимизатор вычислений (Just In Time Accelerator), его сделали как раз для того чтобы ускорить работу интерпретаторов (эта технология используется не только в Java), его возможности весьма ограничены.


>  Есть чётко опредёлённый способ: JNI (Java Native Interface).
>  Через него загружаются и вызываются все динамические библиотеки
> (.dll, .so).

Вот про это не знал


 
tesseract ©   (2006-07-21 12:41) [10]


> А в остальном очень приятный язык. только сдал позиции в
> последнее время, так и не успев их занять.


на серваках, вроде, пока не сдаёт позиций.


 
ZeroDivide ©   (2006-07-21 12:55) [11]

>>Java - как вам оно
Даром не нать. Delphi - forever!


 
Чапаев ©   (2006-07-21 13:05) [12]


> на серваках, вроде, пока не сдаёт позиций.

Жаба? На серваках?


 
tesseract ©   (2006-07-21 13:10) [13]


> Чапаев ©   (21.07.06 13:05) [12]


угу. Netware, IBM WebSpere, ORACLE, Tomcat - можно до Таллина дойти.


 
Ketmar ©   (2006-07-21 13:10) [14]

>Чапаев ©   (21.07.06 13:05) [12]
вполне.


 
Чапаев ©   (2006-07-21 13:14) [15]


> ORACLE,

Там же вроде только front-end навороты на жабе?


> Tomcat

Это да, не поспоришь.

Остальное не щупал. :-)


 
pasha_golub ©   (2006-07-21 14:03) [16]


> iZEN ©   (21.07.06 12:24) [4]

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


 
Palladin ©   (2006-07-21 14:18) [17]


Ketmar ©   (21.07.06 12:28) [5]

>iZEN ©   (21.07.06 12:24) [4]
точно быстрее? и не на тестовых примерах, а на реальных больших проектах? что ж у меня JIDEA так тормозила-то тогда?


Так она-ж не знала что может быстрее работать :)


 
Piter ©   (2006-07-21 15:00) [18]

Ну да, это теория все. Тоже что с технологией .NET... В теории оно конечно да, может работать быстрее, но в реальности...


 
tesseract ©   (2006-07-21 15:11) [19]


> Piter ©   (21.07.06 15:00) [18]


ну Novell ксати рьяно взялась за mono. Очень рьяно.
Наверно ей сильно не понравился опыт внедрения продукта "заклятого друга" в своей netware. ИМХО это только из-за IBM WebSphere.


 
casi2   (2006-07-21 15:52) [20]

>Скоро программистам вообще ничего знать не надо будет, и программы будут состоять из 2-х - 5-ти слов.

Вас еще не посещала мысль примерно такого рода: "Я знаю как решить эту задачу, но для этого нужно написать 4 цикла for, 5 ветвлений и один switch, как было бы хорошо, если бы мысль можно было преобразовать в операторы языка".

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


 
vidiv ©   (2006-07-21 18:29) [21]

Пример: Zend Studio, как я понял написан на java... жутко медленный, даже на моем P4-3200MHz, 1Gb PC3200 озу. по функциональности сравнимо с IDE дельфи, но по качеству очень сильно уступает.


 
Marser ©   (2006-07-21 19:05) [22]

> [4] iZEN ©   (21.07.06 12:24)
>
> > StriderMan ©   (21.07.06 12:04) [1]
> >
> > у Java есть обратная сторона медали, и даже не одна! Во
>
> > первых это интерпретатор, а по сему работает весьма медленно.
> >  Во вторых, если уж понадобились низкоуровневые операции,
>
> >  то придется городить велосипед.
>
> Бред.

Изен, тут все и так знают, что ты фанат Явы и знаешь о ней больше всех. Но не надо же так увлекаться расхваливанием своего болота...


 
wicked ©   (2006-07-21 19:51) [23]

скажу одно слово - Eclipse.... :)
скачайте и посмотрите....


 
Marser ©   (2006-07-21 20:13) [24]

> [8] Чапаев ©   (21.07.06 12:35)
>
> > А кто подскажет литературу по 5-ти?
>
> Поступайте, молодой человек,

Login: isasa
E-mail: isasa@ukr.net
Реальное имя: Александр Иванов
Дата рождения: 22.06.58


LOL


> [21] vidiv ©   (21.07.06 18:29)
> Пример: Zend Studio, как я понял написан на java... жутко
> медленный, даже на моем P4-3200MHz, 1Gb PC3200 озу.

Дык, вот и я о том же. Я понимаю, что Изен в Яве практически гуру и Визард, дай Бог каждому, но с таким же успехом сейчас здесь может выступить Игорь Шевченко, рассказать о своих успехах в борьбе с "системой" и объявить, что Делфи рульнее рульного. Но он этого не делает, оттого, что понимает простую вещь - в руках мастера даже столовая ложка смертельное оружие, а в руках труса и неуча и АК бесполезен и даже опасен для него же.


 
Юрий Зотов ©   (2006-07-21 20:58) [25]

Столовая ложка полезнее. Ею есть можно. Попробуйте есть АК.


 
Gluksman   (2006-07-21 21:20) [26]

Юрий Зотов ©   (21.07.06 20:58) [25]

Есть ложкой живого кабана как-то несподручно. Да и неживого тоже.


 
Юрий Зотов ©   (2006-07-21 21:22) [27]

> Gluksman   (21.07.06 21:20) [26]

Тут о жабах...
:о)


 
Sergey Masloff   (2006-07-21 22:11) [28]

Чапаев ©   (21.07.06 13:14) [15]
>> ORACLE,
>Там же вроде только front-end навороты на жабе?
А хотя бы концептс прочесть было никак?
В оракле мощнейшая java-машина встроена, можно триггеры и хранимки на JAVA писать (да собственно часть встроенных пакетов на JAVA и написана)


 
Den_is ©   (2006-07-21 22:19) [29]


> скажу одно слово - Eclipse.... :)
> скачайте и посмотрите....

Ссылку не подскажешь?


 
Игорь Шевченко ©   (2006-07-21 22:21) [30]

Sergey Masloff   (21.07.06 22:11) [28]

Зачем читать concepts, когда Delphi fareva, а Oracle и вовсе на С написан, даже без плюсов...

Сдается мне, что Java и C# будут "жить долго и счастливо и умрут в один день". IMO вот такое. Все-таки оно хорошо, когда переносимо, не в одних же Windows счастье.


 
wicked ©   (2006-07-21 22:56) [31]

> Den_is ©   (21.07.06 22:19) [29]

> > скажу одно слово - Eclipse.... :)
> > скачайте и посмотрите....
>
> Ссылку не подскажешь?
http://www.eclipse.org


 
iZEN ©   (2006-07-22 15:43) [32]


> Ketmar ©   (21.07.06 12:28) [5]
>
> >iZEN ©   (21.07.06 12:24) [4]
> точно быстрее? и не на тестовых примерах, а на реальных
> больших проектах? что ж у меня JIDEA так тормозила-то тогда?
>

Точно быстрее:
http://izen.dev.juga.ru/downloads/delphitest.zip
http://izen.dev.juga.ru/downloads/javatest.zip

Список приложений на java: http://java.sun.com/products/jfc/tsc/sightings/index.html


 
iZEN ©   (2006-07-22 15:46) [33]


> Игорь Шевченко ©   (21.07.06 22:21) [30]
>
> Сдается мне, что Java и C# будут "жить долго и счастливо и умрут в один день".

А вот это похоже на правду. ;)


 
Ketmar ©   (2006-07-22 16:02) [34]

>iZEN ©   (22.07.06 15:43) [32]
процитирю сам себя: НЕ НА ТЕСТОВЫХ ПРИМЕРАХ. может, большими буквами будет заметнее?


 
VirEx ©   (2006-07-22 16:10) [35]


> Java - как вам оно

сплошные классы да объекты, впринципе ничего так...
только когда нужно было динамические массивы реализовать в клиенте, немного помучался: оказывается "...массив имеет ряд недостатков. Один из самых существенных - размер массива фиксируется до начала его использования..."
и всётаки нашел решение проблемы, оказывается в j2me есть класс Vector, с помощью которого можно оперировать с любыми объектами

и еще: чтобы в дальнейшем разобраться в коде, нужно поработать табулятором :)

...а чтобы не добавлять промежуточных переменных (т.е. классов, т.к. в яве строка (массив), или числовая переменная integer имеют свои классы-обертки String, Integer) приходится пораскинуть мозгами, в следствии чего получаются вот такие строчки:
public void commandAction(Command c, Displayable d){
...
MessageId=( (Integer)Topics.LastMessageId.elementAt( ((List)d).getSelectedIndex() ) ).intValue();

хм.. еще названия классов, объетов "case sensitive" (вроде так пишется :) )


 
iZEN ©   (2006-07-22 16:15) [36]


> StriderMan ©   (21.07.06 12:37) [9]
>
>
> > Java работает быстрее C++ и в некоторых случаях быстрее
> > С, поскольку имеет оптимизацию на стадии компиляции в
> байткод
> > (javac) и на стадии динамической трансляции кода под архитектуру
> > процессора (JIT).
>
> Вы когда-нибудь сами сравнивали?

Естствнно.
> StriderMan ©   (21.07.06 12:37) [9]

> А JIT-ускорение помогает в весьма ограниченных случаях!
> Кстати JIT это же динамический оптимизатор вычислений (Just
> In Time Accelerator), его сделали как раз для того чтобы
> ускорить работу интерпретаторов (эта технология используется
> не только в Java), его возможности весьма ограничены.
Ой, ну зачем такую фигню пороть?
JIT — это общее название инструментов, работающих в режиме "just_in_time" (точно во время). Я имел ввиду JIT-Compiler, который переводит java-байткод в нативный машинный код целевого процессора с учётом особенностей его мироархитектуры, его кэша и объёма доступной оперативной памяти системы.

Как думаете, на кластерах, использующих J2EE для проведения коммерческих транзакций в реальном времени, есть место интерпретируемому коду?

А код из инструментов NASA для слежения за спутниками или приёма фото-видео-информации с марсохода может выполняться в "интерпретирующем" режиме?

Opera Mini у вас в телефоне работает? Почему так, неужели тормозит? Странно, не замечал.


 
iZEN ©   (2006-07-22 16:24) [37]


> VirEx ©   (22.07.06 16:10) [35]
> > Java - как вам оно
>
> сплошные классы да объекты, впринципе ничего так...
> только когда нужно было динамические массивы реализовать
> в клиенте, немного помучался: оказывается "...массив имеет
> ряд недостатков. Один из самых существенных - размер массива
> фиксируется до начала его использования..."
> и всётаки нашел решение проблемы, оказывается в j2me есть
> класс Vector, с помощью которого можно оперировать с любыми
> объектами

См. специализированные ArrayList и LinkedList. Vector давно неэффективен.

Для конкатенации строк лучше использоать класс StringBuffer, а не прямое присваивание s1 + s2/ Пример:
StringBuffer sbf = new StringBuffer();
String result = sbf.append(s1).append(s2);

Неплохо бы изучить Java Collection Framework.

> VirEx ©   (22.07.06 16:10) [35]
> и еще: чтобы в дальнейшем разобраться в коде, нужно поработать
> табулятором :)

Это ещё зачем?
В Eclipse нажать в редакторе [Ctrl]+[Shift]+[T] и код автоматически отформатируется. Настроить свои правила форматирования можно в настройках редактора java-кода среды.

> VirEx ©   (22.07.06 16:10) [35]
> ...а чтобы не добавлять промежуточных переменных (т.е. классов,
>  т.к. в яве строка (массив), или числовая переменная integer
> имеют свои классы-обертки String, Integer) приходится пораскинуть
> мозгами, в следствии чего получаются вот такие строчки:
> public void commandAction(Command c, Displayable d){
> ...
> MessageId=( (Integer)Topics.LastMessageId.elementAt( ((List)d).
> getSelectedIndex() ) ).intValue();
>
> хм.. еще названия классов, объетов "case sensitive" (вроде
> так пишется :) )

О, ужас. Вы что читали? Какие книги такие пространные примеры приводят?

Читайте это: http://skipy.dev.juga.ru/


 
iZEN ©   (2006-07-22 16:26) [38]

В J2ME классов ArrayList и LinkedList нет, так что используйте Vector.


 
iZEN ©   (2006-07-22 16:40) [39]

И ещё одно исправление:
String result = sbf.toString();


 
VirEx ©   (2006-07-22 16:51) [40]


>  [38] iZEN ©   (22.07.06 16:26)
> В J2ME классов ArrayList и LinkedList нет, так что используйте
> Vector.

о чем и речь


> О, ужас. Вы что читали? Какие книги такие пространные примеры
> приводят?

я ничего не читал, и это рабочий пример


> Для конкатенации строк лучше использоать класс StringBuffer,
> а не прямое присваивание s1 + s2/ Пример:
> StringBuffer sbf = new StringBuffer();
> String result = sbf.append(s1).append(s2);
>
> Неплохо бы изучить Java Collection Framework.

я не приводил работу со строками, о чем это вы? :)
а еще можно же так: s+=s1

учить Java Collection Framework? вы об этом? :) :
String str = "abc";
char data[] = {"a", "b", "c"};
String str = new String(data);
String cde = "cde";
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);

к тому же каждый класс по своему имеет плюсы и минусы при использовании в конкретных задачах (StringBuffer хорош в многопоточных приложениях - "String buffers are safe for use by multiple threads."), поэтому всё зависит от ситуации (String после компиляции не так сильно увеличит размер апплета чем StringBuffer, или я не прав?)

конкатенация (от concat) - не думаю что это включат в русский словарь поэтому не стОит увлекаться "американизацией"/"янкинизацией", иначе вас другие не поймут :)


> В Eclipse нажать в редакторе [Ctrl]+[Shift]+[T] и код автоматически
> отформатируется. Настроить свои правила форматирования можно
> в настройках редактора java-кода среды.

у меня и так машина слабая, какие еще IDE, да еще и на яве?
юзаю AsmEdit 2.2, хотя сейчас больше пользую Notepad++


 
VirEx ©   (2006-07-22 17:18) [41]


> iZEN

посмотрел я на вашем сайте примеры мидлетов на j2me - почему не используете switch?:
   public void commandAction(Command c, Displayable d) {
       if (c == splash.getMoreCommand()) {
           splash.suspend();
           //ball.start();
           Display.getDisplay(this).setCurrent(game);
       } else if (c == splash.getExitCommand()) {
           splash.suspend();
           ball.pause();
           this.destroyApp(true);
       } else if (c == game.getStartGameCommand()) {

можно так:
public void commandAction(Command c, Displayable d) {
switch(c) {
 case(splash.getMoreCommand()){
   splash.suspend();
   Display.getDisplay(this).setCurrent(game);
 }
 break;

 case(splash.getExitCommand()){
   splash.suspend();
   ball.pause();
   this.destroyApp(true);
 }
 break;

 default: /* to do */ ;
}


 
DiamondShark ©   (2006-07-22 17:34) [42]


> можно так:

А точно можно? Неконстантные выражения в case?


 
VirEx ©   (2006-07-22 18:07) [43]


> [42] DiamondShark ©   (22.07.06 17:34)
>
> > можно так:
>
> А точно можно? Неконстантные выражения в case?

а что мешает объявить новую переменную как константу (final) и присвоить ей значение "неконстанты"?

его класс:
package floresiris.livetech.ball.ui;
...
public class Splash extends PopupForm {
   private Command more, exit;
   private ImageItem splashImage;
   /**
    * Конструктор без параметров.
    */
   public Splash(String title) {
       super(title);
       more = new Command(I18NResources.getString(I18NResources.ID_GAME_MORE), Command.OK, 1);
       exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.EXIT, 2);
       this.addCommand(more);
       this.addCommand(exit);
       try {
           String path = "/images/firefox.png";
           Image image = Image.createImage(path);
           splashImage = new ImageItem(I18NResources.getString(I18NResources.ID_GAME_NAME), image, ImageItem.LAYOUT_CENTER, "");
           this.append(splashImage);
       } catch (Exception e) {}
   }
   public Command getMoreCommand() {
       return more;
   }
   public Command getExitCommand() {
       final Command e_= exit;
       return e_;
   }

}


 
VirEx ©   (2006-07-22 18:10) [44]

хм... с int проходит а с Command нет :(


 
VirEx ©   (2006-07-22 18:22) [45]

тогда делаем так (ограничиваемся типами команд):
  public int getExitCommand() {
      return exit.getCommandType();
  }

а ловим так:
public void commandAction(Command c, Displayable d) {
switch(c) {
case(Command.EXIT){
  splash.suspend();
  ball.pause();
  this.destroyApp(true);
}
break;


 
iZEN ©   (2006-07-22 18:25) [46]


> VirEx ©   (22.07.06 16:51) [40]
> >  [38] iZEN ©   (22.07.06 16:26)
> > Для конкатенации строк лучше использоать класс StringBuffer,
>
> > а не прямое присваивание s1 + s2/ Пример:
> > StringBuffer sbf = new StringBuffer();
> > String result = sbf.append(s1).append(s2);
> >
> > Неплохо бы изучить Java Collection Framework.
>
> я не приводил работу со строками, о чем это вы? :)
это к слову пришлось. Потому что многие начинающие, не зная основ строк java пытаются в цикле формировать длинную строку. И конечно получают жуткие тормоза. Ведь конкатенация (присоединение) строк друг к дружке в 100-200 раз медленнее, чем это можно сделать через StringBuffer.

> VirEx ©   (22.07.06 16:51) [40]
> а еще можно же так: s+=s1
>
> учить Java Collection Framework? вы об этом? :) :
> String str = "abc";
> char data[] = {"a", "b", "c"};
> String str = new String(data);
> String cde = "cde";
> String c = "abc".substring(2,3);
> String d = cde.substring(1, 2);
Нет. Это другое.
Collection Framework API создавался для удобного манипулирования списком объектов, вернее, ссылками на группу объектов, которые могут быть разных типов (принадлежать к разным классам). К нему относятся интерфейсы Map, List и др. классы-контейнеры, которые могут хранить и манипулировать хранящимися ссылками на другие объекты.


> VirEx ©   (22.07.06 16:51) [40]
>
> к тому же каждый класс по своему имеет плюсы и минусы при
> использовании в конкретных задачах (StringBuffer хорош в
> многопоточных приложениях - "String buffers are safe for
> use by multiple threads."), поэтому всё зависит от ситуации
> (String после компиляции не так сильно увеличит размер апплета
> чем StringBuffer, или я не прав?)
Не сильно. Это из разряда: "экономия на спичках" выливается в тормозааа.
> VirEx ©   (22.07.06 16:51) [40]
>
> конкатенация (от concat) - не думаю что это включат в русский
> словарь поэтому не стОит увлекаться "американизацией"/"янкинизацией",
>  иначе вас другие не поймут :)
Конкатенация - сложение - общеупортебимый в информатике термин.
> VirEx ©   (22.07.06 16:51) [40]
>
> > В Eclipse нажать в редакторе [Ctrl]+[Shift]+[T] и код
> автоматически
> > отформатируется. Настроить свои правила форматирования
> можно
> > в настройках редактора java-кода среды.
>
> у меня и так машина слабая, какие еще IDE, да еще и на яве?
Eclipse писалась с прицелом на эффективное использование на обычных машинах. Внутри используются нативные вызовы для построения интерфейса (GUI) средствами операционной системы.

> VirEx ©   (22.07.06 16:51) [40]
>
> юзаю AsmEdit 2.2, хотя сейчас больше пользую Notepad++

Напрасно. Редакторы с подсветкой синтаксиса хороши, когда нужно просто смотреть код. Но когда дело доходит до рефакторинга кода, то IDE незаменимы.
> VirEx ©   (22.07.06 17:18) [41]
> > iZEN
> посмотрел я на вашем сайте примеры мидлетов на j2me - почему
> не используете switch?
Потому что switch неэффективен. И ссылки не понимает. Понимает только объекты примитивного типа int и константы типа char.


 
VirEx ©   (2006-07-22 18:30) [47]


>  [45] VirEx ©   (22.07.06 18:22)

т.е.
ловим так:
public void commandAction(Command c, Displayable d) {
switch(с.getCommandType()) {
case(Command.EXIT){
 splash.suspend();
 ball.pause();
 this.destroyApp(true);
}
break;


 
DiamondShark ©   (2006-07-22 19:20) [48]


> Потому что switch неэффективен. И ссылки не понимает. Понимает
> только объекты примитивного типа int и константы типа char.

Ограничение примитивными типами как раз и позволяет сделать switch максимально эффективным.

А вообще, странный какой-то switch, подозрительный.
Параметр Command c -- какой-то сложный объект?
А методы getXXX возвращают те же экземпляры, что приходит в пораметр?
Бр-рр... Ну и зависимости...


 
iZEN ©   (2006-07-22 19:49) [49]


> VirEx ©   (22.07.06 18:22) [45]
>
> тогда делаем так (ограничиваемся типами команд):
>   public int getExitCommand() {
>       return exit.getCommandType();
>   }
>
> а ловим так:
> public void commandAction(Command c, Displayable d) {
> switch(c) {
> case(Command.EXIT){
>   splash.suspend();
>   ball.pause();
>   this.destroyApp(true);
> }
> break;

Это ты что хотел этим показать?
Что Command.EXIT — целочисленная константа и ничего более.
Это не тип!
Таких "команд", с позволения сказать, во всём приложении по формам может быть много разбросано, а обработчик у меня на всех один...как тогда я узнаю, что Command.EXIT относится к открытой форме, а не к закрытой, которая тоже, в принципе, может генерировать события (нить, например, там может быть) типа Command с тем же самым целочисленным идентификатором EXIT?
Нет уж, я как-нибудь через идентификатор объекта/ссылки обойдусь, ведь она у всех объектов будет разная.

Ссылки на объект, имеющие одинаковое значение, являются ссылками на один и тот же объект. Поэтому и использую блок if-else, чтобы определить, какая команда (событие о команде) откуда пришла.

Кроме того, целочисленные константы Command.EXIT, Command.OK, Command.BACK и др. определены на уровне KVM телефона, и она располагает надписи софт-клавиш на экране, исходя из предназначения команды/события и тех дизайнерских требований, которые заложили в систему экранного меню разработчики телефона. Скажем, если я создам:
exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.OK, 2);
вместо
exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.EXIT, 2);
то на экране телефона пункт софт-клавиши отобразиться уже в другом углу или вообще будет представлять из себя пункт меню. Тем не менее, активизация этой команды пользователем ничего не меняет — CommandListener перехватит именно эту команду (ссылку Command c), но, естественно, с другим идентификатором — Command.OK. Так же он поступит (он у меня один на всех) с другими командами-событиями от других форм, в которых тоже может быть идентификатор Command.OK. Так что ориентироваться на тип команды нельзя, вместо этого лучше знать её ссылку, что и делаю я, возвращая её в методах форм:
public Command getMoreCommand() {
    return more;
}.


 
VirEx ©   (2006-07-22 19:54) [50]


>  [48] DiamondShark ©   (22.07.06 19:20)

Command - объкт, а switch понимает только примитивы int, char


 
iZEN ©   (2006-07-22 20:03) [51]


> DiamondShark ©   (22.07.06 19:20) [48]
>
>
> > Потому что switch неэффективен. И ссылки не понимает.
> Понимает
> > только объекты примитивного типа int и константы типа
> char.
>
> Ограничение примитивными типами как раз и позволяет сделать
> switch максимально эффективным.
>
> А вообще, странный какой-то switch, подозрительный.
> Параметр Command c -- какой-то сложный объект?
> А методы getXXX возвращают те же экземпляры, что приходит
> в пораметр?
> Бр-рр... Ну и зависимости...
>

Не всё так страшно.
Можно полностью инкапсулировать обработку команд в той форме, на которой они и происходят. Это у меня обработчик один, но на самом деле интерфейс CommandListener может реализовать любая форма и отлавливать внутри себя свои события, только надо объявить, что форма имплементирует этот интерфейс:
public class Splash extends PopupForm implements CommandListener {
...
Сказать, чтобы она ловила события (можно в конструкторе после добавления команд):
this.setCommandListener(this);

и реализовать метод слушателя:
public void commandAction(Command c, Displayable d) {
       if (c == splash.getMoreCommand()) {
           splash.suspend();
           //ball.start();
           Display.getDisplay(this).setCurrent(game);
       }
...
}
Правда, при этом возникнут сложности с переходами между формами, а значит надо будет либо параметризовать (при создании), какая форма (game, например) будет следующей, когда закроется она. Либо вводить глобальную область видимости, когда формы приложения будут знать обо всех остальныхэкземплярах и отображать, когда следует (то есть городить огород с нарушением инкапсуляции или изобретать способ получения ссылок на другие формы).


 
VirEx ©   (2006-07-22 20:04) [52]


>  [49] iZEN ©   (22.07.06 19:49)
> Что Command.EXIT — целочисленная константа и ничего более.
> Это не тип!

я знаю, про то и речь что switch не понимает ничего кроме примитивов, а эта константа в j2me означает тип Command, поэтому максимум что можно сделать через оператора switch - проверить на тип команды (т.е. константу в данном случае)

(остальное что ты мне объясняешь в своём посте я знаю :) )


 
iZEN ©   (2006-07-22 20:05) [53]

Поправочка.
Внутренний код формы будет другим:
public void commandAction(Command c, Displayable d) {
      if (c == this.getMoreCommand()) {
          this.suspend();
          Display.getDisplay(this).setCurrent(game);
      }
...
}


 
iZEN ©   (2006-07-22 20:13) [54]

И ещё поправочка (пишу впопыхах).
Код вызова:
Display.getDisplay(this).setCurrent(game);
вместо this требует ссылку на объект класса MIDlet или на объект его наследника. Так что опять придётся думать над тем, как параметризовать форму (которая до этого ничего не знала о мидлете) ссылкой на её хозяина — экземпляр BallMIDlet.

Впрочем, это у меня показано на примере PopupForm, где производится достаточно гибкая параметризация ссылками на мидлет (owner) и объект Displayable (after), который будет отображатся после автоматического закрытия экземпляра PopupForm.


 
pasha_golub ©   (2006-07-24 22:22) [55]

Это что же за жизнь пошла... чтобы две строки склеить надо классами пользоваться.


 
Ketmar ©   (2006-07-24 22:26) [56]

>pasha_golub ©   (24.07.06 22:22) [55]
это фигня. скоро чтобы сложить 2 и 3 надо будет создать пять классов. %-)


 
Mike Kouzmine ©   (2006-07-24 23:39) [57]

Да и сейчас многие пишут имея всего один класс.


 
iZEN ©   (2006-07-25 11:24) [58]


> Mike Kouzmine ©   (24.07.06 23:39) [57]
> Да и сейчас многие пишут имея всего один класс.

и большой switch/case в единственном методе commandAction...


 
iZEN ©   (2006-07-25 11:27) [59]


> pasha_golub ©   (24.07.06 22:22) [55]
>
> Это что же за жизнь пошла... чтобы две строки склеить надо
> классами пользоваться.

Это — к Sun, создателю языка. Нет бы усовершенствовать класс String до уровня StringBuffer, тогда бы все проблемы с конкатенацией решились. Не захотела, почему-то.



Страницы: 1 2 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.048 c
3-1150544631
Express
2006-06-17 15:43
2006.08.20
Получить случайное число в SQL


2-1154408829
Konsul
2006-08-01 09:07
2006.08.20
Проблема с DLL. Уже совсем ничё не понимаю....


15-1153746532
For kaif
2006-07-24 17:08
2006.08.20
Доколе будем штампами думать?


2-1154285388
Alral
2006-07-30 22:49
2006.08.20
Form.Caption не меняется.


6-1144049407
nikNil
2006-04-03 11:30
2006.08.20
Как получить список открытых портов