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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> компиляция кода для 1.4 в 1.3, абстрактный класс или интерфейс 
:(
    Опции темы
anonymouse
Дата 6.8.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

 A a=new A(
   public void methodA() {
     System.out.println("success");
   }
 )

B b=new B();
b.setA(a);

А это абстрактный класс или интерфейс.
Проблема состоит в том что эта часть кода должна компилироваться в Java 1.3,1.4,1.5, но классы A и B в версии 1.3 не существуют.
Как мне это реализовать. С помощью рефлекшион не получается из-за абстрактного класса.
Заранее благодарен

Это сообщение отредактировал(а) anonymouse - 6.8.2007, 09:37
--------------------
Много чего интересного...
PM MAIL   Вверх
batigoal
Дата 6.8.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(anonymouse @  6.8.2007,  10:36 Найти цитируемый пост)
Проблема состоит в том что эта часть кода должна компилироваться в Java 1.3,1.4,1.5, но классы A и B в версии 1.3 не существуют.

Самый правильный вариант - писать под 1.3 и использовать только то, что есть в нем.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
anonymouse
Дата 6.8.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Это большой проект работающий стандартно 1.4. Но есть старые машины на платформе IBM. Там может быть только 1.3. Этот кусок будет использоваться только как фича, т.е. на 1.3 он работать не будет. Но важно чтобы он компилировался. Обычно эту проблему решают с помощью рефлекшиона Class.forName(...), но в данном случае, используется абстрактный класс. Неужели в модели Java-рефлекшн, ничего подобного не было реализовано ?

--------------------
Много чего интересного...
PM MAIL   Вверх
batigoal
Дата 6.8.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Вообще, у нас в коде индусы где-то создавали экземпляр абстрактного класса, сейчас покопаюсь...

Добавлено через 4 минуты и 44 секунды
Не могу найти...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
anonymouse
Дата 6.8.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(batigoal @  6.8.2007,  12:58 Найти цитируемый пост)
Вообще, у нас в коде индусы где-то создавали экземпляр абстрактного класса, сейчас покопаюсь...

Ну спасибо, ты считаешь что такой фигней только индусы занимаються  smile 

Судя по всему через рефлекшион этого сделать никак нельзя. Придеться фейк класс писать.

Это сообщение отредактировал(а) anonymouse - 6.8.2007, 13:15
--------------------
Много чего интересного...
PM MAIL   Вверх
AlexeyVorotnikov
Дата 6.8.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 18



Абстрактный класс на то он и абстрактный, что создать его экземпляр невозможно даже теоретически.

Уточните всё-таки постановку задачи.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
batigoal
Дата 6.8.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



AlexeyVorotnikov, через рефлекшн - можно было, по крайней мере, до 4-й Явы. Видел.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 10.8.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(batigoal @  6.8.2007,  17:44 Найти цитируемый пост)
через рефлекшн - можно было, по крайней мере, до 4-й Явы. Видел.

Посмотрел JavaDoc по JDK 1.1, и там написано:
Цитата
Throws:
  • ...
  • InstantiationException - if the class that declares the underlying constructor represents an abstract class
  • ...

Ты уверен, что они создавали именно абстрактный класс?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
batigoal
Дата 10.8.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(LSD @  10.8.2007,  01:26 Найти цитируемый пост)
Ты уверен, что они создавали именно абстрактный класс? 

Да. Когда мы этот фрагмент увидели, у меня волосы дыбом встали, такое не забывается smile

Возможно, инстанцированию предшестовали некие махинации с абстракными методами, не знаю.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
math64
Дата 10.8.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Этот кусок кода и все другие которые работают под 1.4 выносишь и компилируешь под 1.4
Остальное компилируешь через 1.3 а для вызова кода 1.4 используешь Class.forName(). Возможно потребуются вспомогательные интерфейсы или абстратктые классы.
Код

public interface JDKInterface {
  void someMethod();
}

Код

public class JDK14Adapter implements JDKInterface {
  void someMethod() {
     <код для 1.4>
  }
}

Код

public class JDK13Adapter implements JDKInterface {
  void someMethod() {
     <замена кода для 1.3>
  }
}

Код

   JDKInterface adapter;

   if (<используется JDK1.3>)
      adapter = new JDK13Adapter();
   else
     adapter = (JDKInterface)Class.forName("JDK14Adapter").newInstance();
   adapter.someMethod();

В итоге получатся 2 jar'а: один для 1.3, другой - расширения для 1.4 При использовании 1.4 второй jar включить в classpath или слить два jar в один.
PM   Вверх
AlexeyVorotnikov
Дата 10.8.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 18



Цитата(batigoal @ 10.8.2007,  09:36)
Цитата(LSD @  10.8.2007,  01:26 Найти цитируемый пост)
Ты уверен, что они создавали именно абстрактный класс? 

Да. Когда мы этот фрагмент увидели, у меня волосы дыбом встали, такое не забывается smile

Возможно, инстанцированию предшестовали некие махинации с абстракными методами, не знаю.

Всё равно не могу себе представить как это может быть сделано.
Где-то здесь что-то не так.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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