как отключить автобоксинг в jdk1.5.0 во время компиляции?
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 18.12.04 07:57
Оценка:
Я както создавал топик с темой на подобие "JBuilder7+jdk1.5.0=verifiy error". Теперь я нашел в нете тему в импортном формуме с такой тематикой, это на форуме sun. Там были советы вроде добавление параметра "-noverify", но это только "решение на одну машину". Самое разумное предмположение, которое там прозвучало, это то, что автобоксинг "во всём виноват". Но там также было сказано:

I suspect it is a JBuilder — java 1.5 compatibility issue. I created a simple java bean using JBuilder6 and the 1.5 SDK. When I try to run the packager for the ActiveX bean bridge, I get a
"java.lang.VerifyError Incompatible object argument for function call".

I wonder if the problem lies in the new AutoBoxing/UnBoxing feature. I am suspicious since I always get this error when trying to run the packager if I have this line somewhere in my code:
System.out.println("text" + Integer.toString(1) + "text");
However, this is OK:
System.out.println("text" + Integer.toString(1));
And this is OK:
System.out.println(Integer.toString(1) + "text");

And then I tried compiling the bean using the NetBeans IDE, then running the packager, and everythng worked fine!

по поводу

Your program

public class Tester {
public Tester() {
String ONE = "abc";
String TWO = "def";
System.out.println(ONE + " " + TWO);
}
public static void main(String[] args) {
Tester tester1 = new Tester();
}
}


runs fine for me on Debian GNU/Linux

|> javac Tester.java
|> java Tester
abc def
|> java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode)
|>

и

It's been a month and a half since I used the -noverify option in the VM parameters to get by this error and I ran into it again in a different project. So after some time I narrowed the problem down into a very simple program, and I found a way around it. Here is the program with the error:

public class Tester {
public Tester() {
String ONE = "abc";
String TWO = "def";
System.out.println(ONE + " " + TWO);
}
public static void main(String[] args) {
Tester tester1 = new Tester();
}
}

This code generates the java.lang.VerifyError at runtime. Now, instead of using the "+" operator inside the catch block, break it up into separate print statements as follows:

public class Tester {
public Tester() {
String ONE = "abc";
String TWO = "def";
System.out.print(ONE);
System.out.print(" ");
System.out.println(TWO);
}
public static void main(String[] args) {
Tester tester1 = new Tester();
}
}

The error disappears (at least it did for me). Interestingly, the first class runs fine if you exclude the " " literal. The class also runs fine if you include the " " literal, but exclude either the ONE or TWO variable. But again, the error only occurs when you include all three in the same println() statement using the "+" operator. I have no idea why. Does anyone know?

Такие вот пироги. Правда поиск в гугле вёлся по поводу "using jdk 1.5.0 with jbuilder7" и "another compiler with jbuilder7".
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re: как отключить автобоксинг в jdk1.5.0 во время компиляции
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 18.12.04 08:41
Оценка:
"Решение" пришло само, как следствие "ошибки".
Запускать JBuilder7 из под JDK 1.5.0 (чтоб летал как на ядернуом антигравитоне, и чтоб без глюков, а проекту выстовить JDK 1.3.1 (правда отладка будет немного глюкаыая в облости гуя олаживаемой проги но после компиляции эти глюки должниы того, — то бишь прекратиться.
Что касается шаблонов — то и без них жить можно. MyType[] ещё никто не отменял (собираешь объекты в LinkedList, а потом toArray возвращаешь, и код пользователь даже не узнает, что у кода-источника внутри происходит за "секс с коллекцией", простите за выражение.
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[2]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Trean Беларусь http://axamit.com/
Дата: 18.12.04 14:12
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

ВП>"Решение" пришло само, как следствие "ошибки".

ВП>Запускать JBuilder7 из под JDK 1.5.0 (чтоб летал как на ядернуом антигравитоне, и чтоб без глюков, а проекту выстовить JDK 1.3.1 (правда отладка будет немного глюкаыая в облости гуя олаживаемой проги но после компиляции эти глюки должниы того, — то бишь прекратиться.
ВП>Что касается шаблонов — то и без них жить можно. MyType[] ещё никто не отменял (собираешь объекты в LinkedList, а потом toArray возвращаешь, и код пользователь даже не узнает, что у кода-источника внутри происходит за "секс с коллекцией", простите за выражение.

Не совсем понял как toArray может спасти от ClassCastException (для чего собственно и были введены generics).
Кстати запускать JBuilder 7 под 5 жавой, наверное не стоит, так как даже с JDK 1.4.2 было много несовместимостей, даже в плане GUI. Кстати рекомендую поставить 2005-й билдер, я уж помню сколько глюков было убрано начиная с 9 (особенно по части web-development), так даже не представляю какой геморой ждал бы меня если бы я писал сейчас на 7-ом =), да еще под новой жавой.
Re[3]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 18.12.04 14:37
Оценка:
Здравствуйте, Trean, Вы писали:

T>Не совсем понял как toArray может спасти от ClassCastException (для чего собственно и были введены generics).

Просто придходится делать сначала Object[] который преобразуется в подленный тип с помощью System.arraycopy.
T>Кстати запускать JBuilder 7 под 5 жавой, наверное не стоит, так как даже с JDK 1.4.2 было много несовместимостей,
Я смотрю, тебе мои топики остальные не попадались. я мегабайт 50 наверное по этому поводу насрал в форуме.

T> даже в плане GUI.

Я наверное родился в рубашке наинанку У меня всё наоборот В jb7 под jdk 1.3.1 срашные глюки с раздвиженим вширь открываемых диалговых окон билдера. А если его запустить из подь 1.5.9 то все эти глюки исчезают, плюс я ускоряю работу билдера с помощью -Dcom.sun.java2d.opengl=true.
А в проекте выставлена jdk 1.3.1, таким образом я избавился от Verify Error.
T>Кстати рекомендую поставить 2005-й билдер, я уж помню сколько глюков было убрано начиная с 9 (особенно по части web-development), так даже не представляю какой геморой ждал бы меня если бы я писал сейчас на 7-ом =), да еще под новой жавой.
Тебя то он может и ждал, но у меня же вссё наоборот Меня герр Моррой обошёл стороной
Между прочем на моём прямо скажем незапгрейденном насмерть компе, JBuilder7 просто летает, если запущен под 1.5.0[!]
Хардвар такой (специально для тебя говорю, так как мя ситуацтя тебе "в новинку": PIII766/256/GeForce Ti4200 128.
А пираты жабу перестали уважать.
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[4]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Blazkowicz Россия  
Дата: 18.12.04 14:51
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:


T>>Не совсем понял как toArray может спасти от ClassCastException (для чего собственно и были введены generics).

ВП>Просто придходится делать сначала Object[] который преобразуется в подленный тип с помощью System.arraycopy.


String[] x = (String[]) v.toArray(new String[v.size()]);//где v - коллекция строк


T>>Кстати запускать JBuilder 7 под 5 жавой, наверное не стоит, так как даже с JDK 1.4.2 было много несовместимостей,

ВП>Я смотрю, тебе мои топики остальные не попадались. я мегабайт 50 наверное по этому поводу ...
Второе китайское предупреждение за брань
Re[5]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 18.12.04 16:23
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>

B> Вы щас будете третье китайское предупреждение делать. Потому что
B>
B>String[] x = (String[]) v.toArray(new String[v.size()]);//где v - коллекция строк
B>

И подобное на моём компе вызывает ClassCastException на серверной стороне. Ладно бы при транспортировке... Вы думаете, я не пытался приведением типа воспользоваться? "Дык оно ж приведение! кто ж его посадит?"
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[6]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Trean Беларусь http://axamit.com/
Дата: 21.12.04 14:01
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

ВП>Здравствуйте, Blazkowicz, Вы писали:


B>>

B>> Вы щас будете третье китайское предупреждение делать. Потому что
B>>
B>>String[] x = (String[]) v.toArray(new String[v.size()]);//где v - коллекция строк
B>>

ВП>И подобное на моём компе вызывает ClassCastException на серверной стороне. Ладно бы при транспортировке... Вы думаете, я не пытался приведением типа воспользоваться? "Дык оно ж приведение! кто ж его посадит?"

Собственно, а откуда вы знаете, что v это коллекция содержащая объекты только одного типа и к тому же String. Вот я и говорю, что без женериксов ничего гарантировать нельзя, только если вы сами знаете на 100%, что в этой коллекции лежит. Странно, что ClassCast вылетает в данном примере, написано ведь правильно.
Re[7]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Blazkowicz Россия  
Дата: 21.12.04 14:13
Оценка: +1
Здравствуйте, Trean, Вы писали:

B>>>
B>>>String[] x = (String[]) v.toArray(new String[v.size()]);//где v - коллекция строк
B>>>

ВП>>И подобное на моём компе вызывает ClassCastException на серверной стороне. Ладно бы при транспортировке... Вы думаете, я не пытался приведением типа воспользоваться? "Дык оно ж приведение! кто ж его посадит?"

T>Собственно, а откуда вы знаете, что v это коллекция содержащая объекты только одного типа и к тому же String. Вот я и говорю, что без женериксов ничего гарантировать нельзя, только если вы сами знаете на 100%, что в этой коллекции лежит. Странно, что ClassCast вылетает в данном примере, написано ведь правильно.


1) Никогда не приходилось работать с коллекцией совершенно разнородных объектов. Не представляю зачем это может понадобиться.
2) Повторюсь но ниразу не приходилось фиксить ClassCastException потому что в коллекцию попал вдруг не тот объект. Поэтому я не считаю что это одно из основных предназначений генериков.
3) А в данном примере ClassCastException может быть вызван заморочками с класслоадингом. То есть у меня в коллекции объекты класс которых загружен одним загрузчиком, а кастить приходиться к классу загруженному другим загрузчиком. Тут-то типобезопастность явы даёт трещину и мы имеем то что мы имеем.
Re[8]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 21.12.04 14:32
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>3) А в данном примере ClassCastException может быть вызван заморочками с класслоадингом. То есть у меня в коллекции объекты класс которых загружен одним загрузчиком, а кастить приходиться к классу загруженному другим загрузчиком. Тут-то типобезопастность явы даёт трещину и мы имеем то что мы имеем.


Не, в данном конкретном случае это не тот случай. java.lang.String всегда быдет загружена одним и тем же bootstrap-загрузчиком (ну если ничего не ломать)
ICQ #333355130
Re[9]: как отключить автобоксинг в jdk1.5.0 во время компиля
От: Blazkowicz Россия  
Дата: 21.12.04 14:37
Оценка:
Здравствуйте, Lucker, Вы писали:

B>>3) А в данном примере ClassCastException может быть вызван заморочками с класслоадингом. То есть у меня в коллекции объекты класс которых загружен одним загрузчиком, а кастить приходиться к классу загруженному другим загрузчиком. Тут-то типобезопастность явы даёт трещину и мы имеем то что мы имеем.


L>Не, в данном конкретном случае это не тот случай. java.lang.String всегда быдет загружена одним и тем же bootstrap-загрузчиком (ну если ничего не ломать)


Пример со стрингами я давал просто чтобы показать как коллекции в массивы загонять, а у товарища Волка-Призрака, там точно другой класс...
Re[10]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 21.12.04 15:23
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Lucker, Вы писали:


B>>>3) А в данном примере ClassCastException может быть вызван заморочками с класслоадингом. То есть у меня в коллекции объекты класс которых загружен одним загрузчиком, а кастить приходиться к классу загруженному другим загрузчиком. Тут-то типобезопастность явы даёт трещину и мы имеем то что мы имеем.


L>>Не, в данном конкретном случае это не тот случай. java.lang.String всегда быдет загружена одним и тем же bootstrap-загрузчиком (ну если ничего не ломать)


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


Я эээ на всё отвечу сразу. Заморочки с класслоадерами тут не причём. Ибо ошибка происходит на сервере, а на клиенте всё ок.
На сервере всё загружается AppClassLoader, или как там сановский стандартный называется.
Не другой, а самый обыкновенный java.lang.String.... Лажа в том, что я забыл уже когда это выскакивало — при отладке в 1.3.1 или при работе автономной (без IDE из Jar-ов)в 1.5.0... Но делать "експлоит" на эту тему я делать не буду — я не подрывник
Переключаешься на свежую траблу старую отправляешь в long persistence.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[11]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Blazkowicz Россия  
Дата: 21.12.04 15:29
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

ВП>Я эээ на всё отвечу сразу. Заморочки с класслоадерами тут не причём. Ибо ошибка происходит на сервере, а на клиенте всё ок.

ВП>На сервере всё загружается AppClassLoader, или как там сановский стандартный называется.
Сановский стандарт тут не причем. И AppClassLoader тут вообще не к месту. У каждого J2EE сервера своя система загрузчиков.

ВП>Не другой, а самый обыкновенный java.lang.String.... Лажа в том, что я забыл уже когда это выскакивало — при отладке в 1.3.1 или при работе автономной (без IDE из Jar-ов)в 1.5.0... Но делать "експлоит" на эту тему я делать не буду — я не подрывник

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

ВП>Переключаешься на свежую траблу старую отправляешь в long persistence.

Есть такое понятие bug tracking system...
Re[12]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 21.12.04 15:42
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Волк-Призрак, Вы писали:


B>Сановский стандарт тут не причем. И AppClassLoader тут вообще не к месту. У каждого J2EE сервера своя система загрузчиков.

Я про это упоминул только в котексте "другой класс"

B>Из этого можно сделать вывод что ты просто что-то проглядел и проблема была совсем в другом.

Самое то странное, что явное обращение к временному Object[] в рамках System.arraycopy работает нормально, а type cast Object[] -> String[] не канает.
"Покажите мне java-класс, не производный от java.lang.Object, понимаешь!...

ВП>>Переключаешься на свежую траблу старую отправляешь в long persistence.

B>Есть такое понятие bug tracking system...
Мдя.... этот мордо-плэй-бой с тайпекастом наверняка мне вйдет боком в какомнить неожиданном переулке моего кода.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[13]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Blazkowicz Россия  
Дата: 21.12.04 16:04
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

B>>Из этого можно сделать вывод что ты просто что-то проглядел и проблема была совсем в другом.

ВП>Самое то странное, что явное обращение к временному Object[] в рамках System.arraycopy работает нормально, а type cast Object[] -> String[] не канает.
ВП>"Покажите мне java-класс, не производный от java.lang.Object, понимаешь!...

Вот она лень... Мало того что не разобрался что к чему (тему уже не один раз обсуждали), так ещё и обозвал указанный выше пример нерабочим даже не опробовав.
Re[14]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 21.12.04 16:58
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Волк-Призрак, Вы писали:


B>>>Из этого можно сделать вывод что ты просто что-то проглядел и проблема была совсем в другом.


Буду думать.

B>Вот она лень... Мало того что не разобрался что к чему (тему уже не один раз обсуждали), так ещё и обозвал указанный выше пример нерабочим даже не опробовав.

Извините. Спишем на дилетантство, ладно?
Пример я попробовал, заменив String на CarCategories. Вот так:
 CarCategory[] x = (CarCategory[]) temp.toArray(new CarCategory[temp.size()]);

Работает. Но без "дополнительного" массива, передаваемого в ToArray — нет.
Я могу сразу передать массив-приёмник нужного размера, а не выделять временый псевдобуфер? Если я правильно понимаю это — то да.

Returns an array containing all of the elements in this list in the correct order. The runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.


Но спрашиваю во избежание, т. .к мне рано быть ещё в чём либо увренным.....
Наверно нельзя мне было книгу Бъерна Страуструпа читать про С++. Там написано было что главное качество всех программеров, что именно она толкает вперёд средства разработки Видно это слишком криво на меня повлияло. Наследие C++
*надеюсь вы поняли что я шучу и надеюсь что вы уже привыкли к моему "младенческому сарказму"*
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[15]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Blazkowicz Россия  
Дата: 21.12.04 17:08
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

B>>Вот она лень... Мало того что не разобрался что к чему (тему уже не один раз обсуждали), так ещё и обозвал указанный выше пример нерабочим даже не опробовав.

ВП>Извините. Спишем на дилетантство, ладно?
ВП>Пример я попробовал, заменив String на CarCategories. Вот так:
ВП>
ВП> CarCategory[] x = (CarCategory[]) temp.toArray(new CarCategory[temp.size()]);
ВП>

ВП>Работает. Но без "дополнительного" массива, передаваемого в ToArray — нет.
Ищи по форуму уже обсуждали почему.


ВП>Я могу сразу передать массив-приёмник нужного размера, а не выделять временый псевдобуфер? Если я правильно понимаю это — то да.

ВП>

ВП>Returns an array containing all of the elements in this list in the correct order. The runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.


ВП>Но спрашиваю во избежание, т. .к мне рано быть ещё в чём либо увренным.....

Ну, криво реализованная коллекция можетм и не так работать. Но все нормальные реализации используют переданный массив если его раземр позволяет.
Re[16]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 21.12.04 17:32
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Ищи по форуму уже обсуждали почему.

Пожалуй, если бы я знал, что есть какаянить штука типа Object[] newArrayOF(Class type, int length);, это было бы хорошо, а так для гарантии придётся сделать константрые массивы 0й длины
в силу

B>Ну, криво реализованная коллекция можетм и не так работать.

B>Но все нормальные реализации используют переданный массив если его раземр позволяет.
Я и так и этак попробую.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[17]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Trean Беларусь http://axamit.com/
Дата: 22.12.04 10:45
Оценка:
Здравствуйте, Волк-Призрак, Вы писали:

ВП>Здравствуйте, Blazkowicz, Вы писали:


B>>Ищи по форуму уже обсуждали почему.

ВП>Пожалуй, если бы я знал, что есть какаянить штука типа Object[] newArrayOF(Class type, int length);, это было бы хорошо, а так для гарантии придётся сделать константрые массивы 0й длины

Пажалуйста:

public static <E> E[] alloc(Class<E> type, int numBands) {
return (E[])Array.newInstance(type, numBands);
}

Работает без ворнингов даже =)

Тут еще кто-то спрашивал зачем мол могут понадобиться списки или мапы с разными типами объектов. Очень просто — переменный список параметров метода (чтобы интерфейс был общий, так например сделано в JAI)
Re[18]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Blazkowicz Россия  
Дата: 22.12.04 10:49
Оценка:
Здравствуйте, Trean, Вы писали:

T>Тут еще кто-то спрашивал зачем мол могут понадобиться списки или мапы с разными типами объектов. Очень просто — переменный список параметров метода (чтобы интерфейс был общий, так например сделано в JAI)


Я спрашивал. Так ведь все приводятся к одному интерфейсу, значит однородны относительно этого интерфейса. А вот коллекция абсолютно разнотипных объектов у который общий только Object, это ИМХО, глупость.
Re[19]: как отключить автобоксинг в jdk1.5.0 во время компил
От: Trean Беларусь http://axamit.com/
Дата: 22.12.04 11:17
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Trean, Вы писали:


T>>Тут еще кто-то спрашивал зачем мол могут понадобиться списки или мапы с разными типами объектов. Очень просто — переменный список параметров метода (чтобы интерфейс был общий, так например сделано в JAI)


B>Я спрашивал. Так ведь все приводятся к одному интерфейсу, значит однородны относительно этого интерфейса. А вот коллекция абсолютно разнотипных объектов у который общий только Object, это ИМХО, глупость.


Вы меня не совсем поняли, вот что я имел ввиду:

interface Processor {
void process(Task task, Collection<Object> params); // передаем список значений параметров
Collection<ParamDescriptor> getParams(); // возвращаем требуемые параметры
}


class ParamDescriptor {
public Class type; // тип параметра
public String name; // имя параметра
public Object value; // значение
}

То есть иногда требуется иметь несколько имплементаций одного интерфейса, типы и кол-во параметров одного из методов которого в compile time не известны. Разумеется каждый из классов имплементирующих такой интерфейс должен иметь метод типа validateParams() чтобы не вызывать ClassCastException. Данная схема очень удобна, когда требуется выполнить одинаковые операции, отличающиеся какими либо параметрами, которые надо запросить у пользователя.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.