Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лишние import после компиляции, Портирование и препроцессинг 
:(
    Опции темы
Anton Vatchenko
Дата 2.11.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Уже давно работаю с джавой, но всегда оставалась проблема сборки нескольких версий (на разные мобильные устройства - но суть темы не в этом). Раньше пользовался сишным препроцессором, который не давал возможность нормально работать в Эклипсе. Затем смотрел в сторону Антенны, но там реализованы только условия - мне очень необходимо заменять некоторые функции, скажем в коде DRAW(x, y), а в зависимости от указанного заголовочного файла (как было в препроцессоре си), этот код заменяется. Так вот в антенне этого нет.

Появилась мысль создать классы с финальными методами и членами, и в зависимости от версий их подставлять. Код становится удобным для работы в Эклипсе. Помещать эти классы решил в особый пакет типа com.porting.*, и после компиляции просто не включать в дистрибутив - ведь все обращения в приложении к тем финальным полям заменяются на их значения, и файл как бы не нужен. Вот только после компиляции код:

Код

class A {
    A() {
        System.out.println(com.porting.Lang.MESSAGE_HELLO);
    }
}


превращается (это декомпилированный вариант):

Код

import com.porting.Lang;

class A {
    A() {
        System.out.println("Добро пожаловать");
    }
}


И возникает вопрос - а кому тут нужен import com.porting.Lang, если он нигде не используется? Это такая фича джавы? Нет ли возможных флагов, чтобы данную гадость убрать?


--------------------
user posted image
PM MAIL   Вверх
ivanovpv
Дата 2.11.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 4
Всего: 28



Цитата(Anton Vatchenko @  2.11.2009,  13:48 Найти цитируемый пост)
Уже давно работаю с джавой, но всегда оставалась проблема сборки нескольких версий (на разные мобильные устройства - но суть темы не в этом). 


Я пользуюсь Нетбинсом, там есть встроенный препроцессор - не то чтобы ох-ах, но работает. Для тех же мобильных устройств без проблем работаю с 5-6 устройствами в одном коде. 


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Anton Vatchenko
Дата 2.11.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Если не ошибаюсь, там нельзя засунуть в препроцессор процедуры, а также заставить использовать определенные переменные в коде. Примеры:

1. Есть функция, которую хочется использовать во многих местах, к примеру рисование спрайта. Не писать же везде ifdef NOKIA и т.п. Намного легче написать DRAW_SPRITE(x, y), и в зависимости от текущих заголовочных файлов будет подставлен метод конкретной модели устройства.
2. Языковые данные. Нельзя написать System.out.println(LANG_HELLO), чтобы затем быстро собирать русские и английские версии. Ведь языковые файлы-бинарники - это самое неоптимальное что есть.

Да и не все на нетбинсах сидят...

Это сообщение отредактировал(а) Anton Vatchenko - 2.11.2009, 20:15


--------------------
user posted image
PM MAIL   Вверх
math64
Дата 3.11.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Попробуй использовать интерфейсы:
Код

package com.porting.ilang;
public interface IHello {
   String getMessageHello();
}

Код

package com.porting.lang.ru;

public class Hello implements com.porting.ilang.IHello {
   pubic String getMessageHello() { return "Добро пожаловать"; }
}

Код

import com.porting.ilang.IHello;
public class A {
    String lang = "ru"; // Строка может инициализироваться из конфигурации мидлета
    A() {
        IHello ihello = (IHello)class.forName("com.porting.lang."+ lang + ".Hello");
        System.out.println(ihello.getMessageHello());
    }
}


Это сообщение отредактировал(а) math64 - 3.11.2009, 10:49
PM   Вверх
ivanovpv
Дата 3.11.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 4
Всего: 28



Цитата(Anton Vatchenko @  2.11.2009,  20:13 Найти цитируемый пост)
Если не ошибаюсь, там нельзя засунуть в препроцессор процедуры, а также заставить использовать определенные переменные в коде.

Я пишу примерно так:
Код

    //#if JSR82
     Command send = new Command("Send", Command.ITEM, 7);
     Command receive = new Command("Receive", Command.ITEM, 8);
    //#endif


То есть если сборка поддерживает bluetooth - то появляется специфическая опция меню. Не говорю, что это фонтан, но как грится вполне съедобно

Цитата(Anton Vatchenko @  2.11.2009,  20:13 Найти цитируемый пост)
Языковые данные. Нельзя написать System.out.println(LANG_HELLO), чтобы затем быстро собирать русские и английские версии. Ведь языковые файлы-бинарники - это самое неоптимальное что есть.


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

Цитата(Anton Vatchenko @  2.11.2009,  20:13 Найти цитируемый пост)
Да и не все на нетбинсах сидят...

Эт точно  smile 


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.