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

Вниз

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

 
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.59 MB
Время: 0.044 c
2-1154143749
Василий
2006-07-29 07:29
2006.08.20
Как пользоваться функцией GetWindowplacement?


15-1153814754
Pazitron_Brain
2006-07-25 12:05
2006.08.20
Можно соединить КПК с


15-1153452702
Капитошка
2006-07-21 07:31
2006.08.20
Определение своего внешнего айпи-адреса


2-1154437819
NightAngel
2006-08-01 17:10
2006.08.20
Помогите с пост-запросом


15-1153654286
Firefly
2006-07-23 15:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский