Форум: "Прочее";
Текущий архив: 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.048 c