Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.036 c
1-1152100482
Elen
2006-07-05 15:54
2006.08.20
Проблема с запуском программы вызывающей СОМ-объект


2-1153253039
FifteenTen
2006-07-19 00:03
2006.08.20
Как в проводнике


1-1152023599
DancerMan
2006-07-04 18:33
2006.08.20
Не запускается exe-шник


1-1152087970
Mouserx
2006-07-05 12:26
2006.08.20
Возможности компилятора


2-1154430637
Dysan
2006-08-01 15:10
2006.08.20
Как выловить утечку памяти в программе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский