LINUX.ORG.RU

Ответ на: комментарий от Yilativs

>>К .Net можно поставить GTK# и писать нормальные приложения.

>Ты много написал? Покажи хоть одно пожалуйста.

Достаточно, чтобы быть уверенным, что оно работает. Не идеально, но стабильно и без особых глюков.

Дорастут приложеньица до состояния "интересно не только мне" - покажу.

>возьми 10 приложений на C# и 9 (если не 10) из них будут работать только на windows.

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

>Вопрос, а зачем тогда на linux нужен mono когда есть wine?

стабильно работающие приложения с нормальной интеграцией. приложения под wine глючат, имеют проблемы с русским в клипборде и т.д. и потому рабочими не являются.

AVL2 ★★★★★
()
Ответ на: комментарий от Yilativs

>Покажи хоть одно пожалуйста.

Интересно почему hugin, autopano написаны на C# и используют Mono? В Fedora 5 наверное еще другие приложения найдутся, наверное. Я не защищаю C#, мне не понятно зачем он нужен, но просто интересно?

GladAlex ★★★★★
()
Ответ на: комментарий от Yilativs

> Вопрос, а зачем тогда на linux нужен mono когда есть wine?

На самом деле моно не столько для тех кто хочет запускать виндовс на линуксе, сколько наоборот. В этом смысле даже моно позиционируется как альтернативный .NET, а не просто .net unix port, именно поэтому у них есть и виндовая версия. То есть это скорее для тех кто хочет свои приложения под линукс заставить работать под виндой тоже. В этом смысле моно конкурирует с java.

r ★★★★★
()
Ответ на: комментарий от anonymous

>Видимо очень большой кровью им этот JVM достался.

Не "им" а индустрии. Если микрософт поддерживает только себя любимую и они в одиночном порядке могут поменять .NET, то на рынке java дохренища вендоров. При изменении VM надо будет не просто санкам написать и под три платформы скомпилять, а есть еще упоминавшиеся тут openVMS, Tru64 который тут упоминался, есть apple, есть SGI со своей поддержкой всех своих процессоров и терабайт на irix, IBM со всеми своими железками....

r ★★★★★
()
Ответ на: комментарий от Yilativs

>Учитывая текущую ситуацию - это касается почти всех приложений, за исключением системных утилит.

Это конечно нетак.

>Ссылку на AppServer дайтие пожалуйста. Или хотя бы на одно написанное вами приложение, которое работает под Windows,Solaris.

Из фришного - лет 5 назад работал над Berlin ( сейчас Fresco ). Другие, более серьезные вещи в свободном доступе не лежат и вряд ли будут.

anonymous
()
Ответ на: комментарий от AVL2

>Если по сравнению с XP, то да, именно поэтому.

По сравнению с чем угодно. Они другие. А то что в 2.0 появился XP l&f, так и в свинге есть такой.

r ★★★★★
()
Ответ на: комментарий от Licvidator

>Потому-что если ты изменишь JVM, то код, написанный для JDK 1.3 не будет работать в JDK 1.5. И потому-что нечего всякой ненужной чешуей язык замусоривать. Зачем мне что-то внесенное в язык, если я могу сделать то же самое при помощи внешней библиотеки?

C# например обеспечивает совместимость сверху в низ - неужели это такая неразрешимая проблема для жаба?

>На мой вопрос "А чем же плохи дженерики" меня грубо обозвали. Я не работал в Java с Generics, и просто спрашивал. Вопросы в этом форуме уже не приветствуются? Кстати, Анонимус, объясни пожалуйста, чем все же плохи дженерики, и где они используются?

Обзываться - это здесь так принято, ибо здешний контингент - студенты, школьники, которые таким образом самоутверждающиеся и стеберы, стебающиеся на первыми двумя в свободную минуту. И соб-но на вопрос: дженерики ничем не плохи - плоха их реализация в жаба можно например просветиться здесь http://www-128.ibm.com/developerworks/java/library/j-jtp01255.html, ну а где используются дженерики и для чего - это нужно вам бы почитать что нибудь из литературы.

anonymous
()
Ответ на: комментарий от Licvidator

>Вот, нашел. А зачем так делать? Такие вещи должен делать паттерн Factory. Зачем вносить что-то подобное в язык? А если E - это интерфейс? Как ты new для интерфейса вызывать будешь? Что будет в C# если ты попытаешься сделать такое для класса, у которого нет пустого конструктора?

Вам бы почитать чего по дженерикам то. А то ведь за такие вопросы не ровен час опять обзовут.

anonymous
()
Ответ на: комментарий от AVL2

>>>К .Net можно поставить GTK# и писать нормальные приложения.

>>Ты много написал? Покажи хоть одно пожалуйста.

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

Понятно, без особых глюков -хорошо звучит.

>>возьми 10 приложений на C# и 9 (если не 10) из них будут работать только на windows.
>без пересборки под той же моно? не ставил такой задачи. Хорошо, когда работает, как есть, но совершенно не обязательно.

когда у тебя нет исходных кодов - это обязательно.

>>Вопрос, а зачем тогда на linux нужен mono когда есть wine?
>стабильно работающие приложения с нормальной интеграцией. приложения под wine глючат, имеют проблемы с русским в клипборде и т.д. и потому рабочими не являются.

А mono стабильно работает? Запусти хоть одно приличное windows приложение на .net на mono. Оно просто не заработает, до глюков в clipboard не дойдет.

Yilativs ★★★★
() автор топика
Ответ на: комментарий от anonymous

====================
Вот, нашел. А зачем так делать? Такие вещи должен делать паттерн Factory. Зачем вносить что-то подобное в язык? А если E - это интерфейс? Как ты new для интерфейса вызывать будешь? Что будет в C# если ты попытаешься сделать такое для класса, у которого нет пустого конструктора?

Вам бы почитать чего по дженерикам то. А то ведь за такие вопросы не ровен час опять обзовут.
====================


Почитал. Кстати, для вышеприведенного примера:

public void doSomething(E param) throws Exception
{
try
{
Constructor c=param.getClass().getConstructor(new Class[]{});
m_E=(E)c.newInstance();
}
catch(NoSuchMethodException nex)
{
System.err.println("No constructor with empty parameters");
}
}

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

Licvidator
()
Ответ на: комментарий от anonymous

>http://www-128.ibm.com/developerworks/java/library/j-jtp01255.html, н

По этой ссылке не ходи. Аффтару опуса надо присоединятся к томми. Он нихрена не изучил java даже без генериков. А многие вещи о которых он написал вообще подсказывают о том что он нихрена не понимает зачем генерики вообще нужны.

r ★★★★★
()
Ответ на: комментарий от r

============== По этой ссылке не ходи. Аффтару опуса надо присоединятся к томми. Он нихрена не изучил java даже без генериков. А многие вещи о которых он написал вообще подсказывают о том что он нихрена не понимает зачем генерики вообще нужны. ==============

Таки сходил. Я это когда-то читал. О примерах: действительно оисаны вещи, малоприменимые в обычной практике программирования (по крайней мере я за 4 года Java-программинга с подобными ситуациями не сталкивался).

Типа "Вы не сможете при помощи микроскопа выковать ребра радиатора для Антаресианского звездолета"?

Licvidator
()
Ответ на: комментарий от anonymous

> Из фришного - лет 5 назад работал над Berlin ( сейчас Fresco ).

Мама! И после этого мне будут говорить про уродливость виджетов в Java? :(

Skull ★★★★★
()
Ответ на: комментарий от Licvidator

А если надо так:

public class ttt<E> { public void DoSomething() { E e=new E(); e.DoSomething(); } }

собственно, проблема дженериков в Java в том, что в методах нельзя обращаться к информации о типе E.

Eugene_Korobko
()
Ответ на: комментарий от GladAlex

>Интересно почему hugin, autopano написаны на C# и используют Mono? В Fedora 5 наверное еще другие приложения найдутся, наверное. Я не защищаю C#, мне не понятно зачем он нужен, но просто интересно?

hugin написан на C++ и использует wxWidgets. autopano - IMHO сишный. На C# написан autopano-sift, который с Gtk# интерфейсом. Зачем - точно неизвестно...

adarovsky ★★★★
()
Ответ на: комментарий от r

>> Вопрос, а зачем тогда на linux нужен mono когда есть wine?
>На самом деле моно не столько для тех кто хочет запускать виндовс на линуксе, сколько наоборот. В этом смысле даже моно позиционируется как альтернативный .NET, а не просто .net unix port, именно поэтому у них есть и виндовая версия. То есть это скорее для тех кто хочет свои приложения под линукс заставить работать под виндой тоже. В этом смысле моно конкурирует с java.

Тогда уж конкурент не java, а kafe/gcj/classpath/etc ;-)





Yilativs ★★★★
() автор топика
Ответ на: комментарий от Licvidator

>О примерах: действительно оисаны вещи, малоприменимые

Дело не в малоприменимости. Например тип даже не знает что в Cloneable нету метода clone(), но рассчитывает что

<C extends Cloneable> C xClone(C c) { return (C)c.clone(); }

должно откомпилироваться. И жалуется на генерики когда оно выдает ошибку копиляции. Он что - перепил? При чем тут генерики?

Второй перл:

class Foo { public void doSomething(Set<?> set) { Set<?> copy = new HashSet<?>(set); // illegal } }

Офигеть. Он что решил что "?" объявленный в параметре это тот же самый что и внутри метода? Какой нахрен "defensive copy" если он сам сказал что ему плевать какой там тип?

Если этот тип действительно " serves on several JCP Expert Groups " мне жалко Гослинга.

Неудивительно что томми разбился.

r ★★★★★
()
Ответ на: комментарий от Skull

К стати там одно из последних изменений - портирование на solaris. А как же "работал и на винде и на солярке"?

r ★★★★★
()
Ответ на: комментарий от r

>Например тип даже не знает что в Cloneable нету метода clone(), но рассчитывает что

Где он пишет о clone в Cloneable? "Unfortunately, you still can't call param.clone(). Why? Because clone() has protected access in Object" -Вот что он пишет. Перевести?

>Офигеть. Он что решил что "?" объявленный в параметре это тот же самый что и внутри метода? Какой нахрен "defensive copy" если он сам сказал что ему плевать какой там тип?

Это статья для людей, которые хоть немного умеют думать. И речь идет о том, что если бы в рантайме имелась информация о параметризованных типах (добавлять надо фичи в jvm!), то и ситуация с clone и new HashSet<?>(set) элементарно бы разруливалась, ибо было бы известно что за тип скрывается под ? при каждом конкретном вызове doSomething и перегружен ли в Т или в его предках clone как паблик.

>Если этот тип действительно " serves on several JCP Expert Groups " мне жалко Гослинга.

Чтоже вы непредложите свою кандидатуру на его место? Или гослинг стал настолько туп?

anonymous
()
Ответ на: комментарий от anonymous

>Вот что он пишет. Перевести?

Нет, читать перед этим. What about clone()? Let's say Foo was defined to make T extend Cloneable:

А почему не Runnable? Или Serializable? Или МожемПоискатьБолееДругойИнтерфейсКоторыйВсеРавноНеДекларитclone()able?

>Это статья для людей, которые хоть немного умеют думать.

Люди которые умеют думать понимают, что если в классе метод protected то из outer scope относительно домена и пакета его не видно, и генерики тут совершенно не при чем.

> new HashSet<?>(set) элементарно бы разруливалась

Ситуация с HashSet<?> элементарно разруливается как

<T> doSomethong(Set<T> s) { Set<T> copy = new HashSet<T>(s); }

Что такое new HashSet<?>() и как из этого должно родится defensive copy of a parameter это к гадалке.

r ★★★★★
()
Ответ на: комментарий от anonymous

>Чтоже вы непредложите свою кандидатуру на его место? Или гослинг стал настолько туп?

Гослинга мне жалко в том смысле - что решения относительно того что будет делаться в java принимают такие "experts".

r ★★★★★
()
Ответ на: комментарий от anonymous

>>Ссылку на AppServer дайтие пожалуйста. Или хотя бы на одно написанное вами приложение, которое работает под Windows,Solaris.

>Из фришного - лет 5 назад работал над Berlin

Я просил ссылку на Application Server, причем тут Berlin/Fresco?

но раз уж Fresco сюда забрел, он, что под Linux,Solaris,Windows работал 5 лет назад?

Yilativs ★★★★
() автор топика
Ответ на: комментарий от Yilativs

Berlin/Fresco построен как app. server. Также Fresco использует Corba.

jkir
()

Если кто не понимает, зачем нужны generic'и, то generic programming -- это "обобщенное программирование". Специальная версия алгоритма генерируется по обобщенной (написанной программистом), обеспечивая тем самым статический полиморфизм. И столь нелюбимый многими C++ -- это на сегодня в первую очередь templates (generic) и Standard Template Library. Templates в C++ по сути дела "язык в языке" (причем язык функциональный).

jkir
()
Ответ на: комментарий от r

>А почему не Runnable? Или Serializable? Или

Да потому, что в этом случае компилятор был бы ОБЯЗАН непропустить такой код, т.к. он очевидно привел бы к CloneNotSupportedException в рантайме. С протектед методами ситуация действительно забавна и решать ее в рантайме было бы слишком накладно. Однако в С# такой проблемы нет. Нет ее и в С++ и в Ada и в Eiffel.

>Ситуация с HashSet<?> элементарно разруливается как <T> doSomethong(Set<T> s) { Set<T> copy = new HashSet<T>(s); }

Напишите код, и попробуйте скомпилить. Вы убедитесь что НЕ разруливается. Увы. Да и в вашем примере, когда "T" не имеет никакого семантического значения оно эквивалентно "?". По крайней мере это логично если смотреть с позиции здравого смысла.

anonymous
()
Ответ на: комментарий от anonymous

>>Ситуация с HashSet<?> элементарно разруливается как <T> doSomethong(Set<T> s) { Set<T> copy = new HashSet<T>(s); }

>Напишите код, и попробуйте скомпилить. Вы убедитесь что НЕ разруливается. Увы. Да и в вашем примере, когда "T" не имеет никакого семантического значения оно эквивалентно "?". По крайней мере это логично если смотреть с позиции здравого смысла.

RTFM: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf страница 9 - все компилиться

anonymous
()
Ответ на: комментарий от Bioreactor

> Не нужен Си-Шарп под линукс.

Все слышали? Их величество Bioreactor сказали, что Си-Шарп не нужен :-Р

AP ★★★★★
()
Ответ на: комментарий от anonymous

>Да потому, что в этом случае компилятор был бы ОБЯЗАН непропустить такой код

Хватит гнать на компилятор. Cloneable не декларирует никаких методов. Весь этот интерфейс шаманство для VMа и язык тут не при чем.

Для справки:

Cloneable c = new ArrayList(); c.clone();

Information: Compilation completed with 1 errors and 0 warnings Information: 1 error Information: 0 warnings Error: line (13) cannot find symbol method clone()

Since начала времен. Без всяких генериков.

>Напишите код, и попробуйте скомпилить.

Для справки - компилиться и работает.

>Да и в вашем примере, когда "T" не имеет никакого семантического значения оно эквивалентно "?"

Для справки в моем пример T накладывает типовоге ограничения на параметр метода, локальную переменную и инстанс такое что все это должно быть _одного и того же типа - T_.

В примере с wildcard написано что параметр принимает любой мусор. Локальная переменная содержит любой мусор. Между "любой" и "один и тот же" разницу чувствуем? Вот и компилятор чувствует. Мой type variable связывает все декларации воедино, а wildcard "?" не делает этого.

r ★★★★★
()

Логично.
В RH всё-таки сидят нормальные бизнесмены, способные осознавать причинно-следственные связи.

Дело в том, что единственная качественная IDE для .NET и ASP .NET - это Visual Studio. Бесплатный к тому же, как бы не скрежетали зубами конкуренты.
А "шляпникам" надо, чтоб разработчики сидели и отлаживались под Windows?
Им нужен результат, когда отлаженный .NET или ASP .NET проект вдруг не заработает под RH EE с Mono и/или mod_aspnet?

На енто они пойтитЬ не могутЬ.

AffreuxChien
()
Ответ на: комментарий от Yilativs

>когда у тебя нет исходных кодов - это обязательно.

вот и пользуй тогда эмуляторы. mono - не эмулятор. Если под ним идут приложения от .Net, это совпадение, а не правило.

>А mono стабильно работает? Запусти хоть одно приличное windows приложение на .net на mono. Оно просто не заработает, до глюков в clipboard не дойдет.

на mono пишут приложения, а не используют вместо вайна. Под эмулятором приложение должно идти без перекомпиляции, как есть, но медленно и глючно. Под mono приложение должно идти также, как любое другое, родное.

AVL2 ★★★★★
()
Ответ на: комментарий от prasthita

>исходник на Java _компилируется_ в байт-код виртуальной машины, который к Java имеет довольно отстраненное отношение.

Это внутренние тонкости процесса. В питоне код точно также компилируется в бинарные *.pyc или *.pyo, имеющие малое отношение к языку и что? питон теперь - компилируемый язык?

В C# код вообще оформляется в виде испоняемого файла и что дальше? суть одна и таже. Есть некий player (VM), нативный для данной платформы, который и интерпретирует программу.

AVL2 ★★★★★
()
Ответ на: комментарий от r

>По сравнению с чем угодно. Они другие. А то что в 2.0 появился XP l&f, так и в свинге есть такой.

там точно такой же binding на winforms, как в mfc. Просто на старые виджеты. Теперь добавили и на новые XP. В любом случае это убожество, хотябы из-за отсутствия нормального layout. Однако суть не в этом. Глядя на яву сразу можно сказать, что это и ЯВА с ее идиотскими закладками, кнопками и прочими мутными виджетами. Глядя на приложение на mono никогда не скажешь, это моно или обычное gtk приложение.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>Глядя на яву сразу можно сказать, что это и ЯВА с ее идиотскими закладками, кнопками и прочими мутными виджетами.

Не вперед. Запусти swingset2 включи Windows L&F и покажи какие видгеты отличаются.

anonymous
()
Ответ на: комментарий от AVL2

Не пойму, чего ты так в этот моно вцепился ? Gtk и привычный (когда оно так, и привычный на самом деле для кого ?) l&f это хорошо, а что если я хочу написать раз и потом не думать что оно где-то там может не работать ? Всетаки gtk-sharp, вещь платформо-зависимая и без сборки для каждой платформы не получится. (Если не ошибаюсь, нельзя взять тоже приложения собранное с gtk-sharp под Win*, доставить тот-же gtk-sharp под Linux ?)

Кстати, для жабы тоже существуют gtk биндинги (эклипс, азуреус)

anonymous
()
Ответ на: комментарий от anonymous

Я не хочу иметь под каждую софтину или фреймворк свою настройную программу XXXset. Я хочу запускать программу и видеть ее в нормальном виде. Достали уже все эти qt/gtk/tk/swing настройщики и настройки. Есть система, в ней есть установленная тема - вот и пользуйся ей, а не делай свой ЦУП для выбора лук-н-филов.

swing имеет смысл сравнить с wxwidgets. Типа, написали один код, а он везде в родные виджеты транслируется. Точно такая же утопия. И глючат оба одинаково.

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

>Всетаки gtk-sharp, вещь платформо-зависимая и без сборки для каждой платформы не получится. (Если не ошибаюсь, нельзя взять тоже приложения собранное с gtk-sharp под Win*, доставить тот-же gtk-sharp под Linux ?)

Почему нельзя. У меня в обоих системах стоит gtk-sharp и приложения работают и там и там. причем под win gtk-sharp есть и под mono и под .net

На яве можно не думать о работоспособности - оно просто нигде нормально работать не будет. Проверено на нескольких банк-клиентах, xml редакторе, ldap редакторе и еще десятке программ.

Воьзми тот же eclipse - это называется, GTK-виджеты? про скорость вообще молчу...

азуреус, пожалуй, пример хорошего приложения. Но опять незадача, явы в дистрах нет, надо ставить-гемор-неохота=нету_у_меня_азуреуса

AVL2 ★★★★★
()
Ответ на: комментарий от Eugene_Korobko

>В Java дженерики - не более чем косметический фантик. Только для автоприведения типа в коллекциях. Например, вот так: public class MyClass<E> { private E m_E; public MyClass() { m_E=new E(); } }

на Java 5 сделать нельзя, а в С#2 можно.

Батенька, а вы представляете, как можно сделать m_E=new E() если у класса E нет конструктора E() а есть только какой-нибудь Е(int a)? Так что не надо на Java дженерики наезжать.

dimag
()
Ответ на: комментарий от anonymous

линуху ничего вообще не нужно.

а девелоперам нужна возможность писать кроссплатформенные приложения.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Это не тонкости. Это - определение термина "компилировать".

http://en.wikipedia.org/wiki/Compiler

если нечто плейится не на реальном CPU, а на виртуальном, это не означает, что это нечто - интерпретируемый код

есть такая штука - уровни абстракции и виртуализации

P.S. IMHO, самые идиотские споры - споры вокруг терминов

prasthita
()
Ответ на: комментарий от AVL2

>На яве можно не думать о работоспособности - оно просто нигде нормально работать не будет

Если "нигде" то это /dev/hands.

r ★★★★★
()
Ответ на: комментарий от dimag

Батенька, на VB.NET 2 этот код выглядит так:

Private Class SearchHelper(Of T As {New})

где As {New} - это ограничение на класс - требование наличие дефолтного конструктора. Такие ограничения можно совмещать с заданием обязательного предка. Так что тут всё в порядке.

Eugene_Korobko
()
Ответ на: комментарий от prasthita

> исходник на Java _компилируется_ в байт-код виртуальной машины, который к Java имеет довольно отстраненное отношение.

Лжешь. Семантика этой убогонькой уродской виртуальной машины есть прямое отображение семантики языка Java. И, соответственно, она очень хреново подходит для других языков, от жабки отличающихся.

При этом, CLI - гораздо более гибкая и развитая VM, в которую можно эффективно компилировать самые разнообразные языки.

anonymous
()
Ответ на: комментарий от anonymous

> Вообще .нет не имеет виртуальной машины.

Убей себя лопатой, придурь.

anonymous
()
Ответ на: комментарий от AffreuxChien

Песдишь блядовитая скотина.

Visual Studio - уёбистая хуеботина для пизданутых на голову гнидоёбищь (ну, таких вот хуёвых, как ты, жопа). Нормальные люди разрабатывают приложения под .NET, используя Emacs.

anonymous
()
Ответ на: комментарий от AVL2

> Есть некий player (VM)

Да, да, elf loader (libdl) - тоже player (VM)... Который и интерпретирует программу.

anonymous
()
Ответ на: комментарий от r

>Хватит гнать на компилятор. Cloneable не декларирует никаких методов. Весь этот интерфейс шаманство для VMа и язык тут не при чем.

Гы! Насколько видно из предыдущего обсуждения, никто и не говорил что у Clonable есть какие то методы. И про шаманство тоже правда. Невозможность обьявить протектный интерфейс на уровне пэкиджа и приводит к такому уродству. Для справки: любой объект имеет метод clone. Ты не знал? Запись < a extends Clonable > значит ОБЪЕСТ "а", который наследует или имлементирует некий "Clonable". Ключевое cлово ОБЪЕСТ означает что "а" наследует Object, а поэтому твой код здесь по барабану и только показывает что ты НЕ ПОНИМАЕШЬ дженериков в java.

>В примере с wildcard написано что параметр принимает любой мусор. Локальная переменная содержит любой мусор.

Да ну! Открытие однако! В этом примере написано, что параметр принимает любой ОБЪЕКТ, т.е. экземпляр любого класса наследованного от Object. И если далее в коде я например хочу напечатать название класса каждого второго элемента коллекции начиная с 25-го, то мне насрать на то, что там лежит. Мне нужно знать только одно - ТАМ ЛЕЖИТ нечто унаследованное от Object-а. И wildcard дает мне такую информацию.

>Cитуация с HashSet<?> элементарно разруливается как <T> DoSomethong(Set<T> s) { Set<T> copy = new HashSet<T>(s); }

Еще она разруливается так <T> DoSomethong(Set<T> s) { Set<?> copy = new HashSet<T>(s); } Вот только нахрена козе баян? Ибо

DoSomethong(Set<?> s) { Set<?> copy = new HashSet<?>(s); }

Вполне логично и должно работать.

>Мой type variable связывает все декларации воедино, а wildcard "?" не делает этого.

Ошибаешся. Все параметры дженериков - Object-ы и если больше ничего не нужно, то "?" вполне достаточно.

Адью и хватит месить воду в ступе.

anonymous
()
Ответ на: комментарий от anonymous

> Насколько видно из предыдущего обсуждения, никто и не говорил что у Clonable есть какие то методы.

Аффтар опуса на DW почемуто ожидал что если он напишет class A<C extends Cloneable> то у C c; появиться метод clone().

>Вполне логично и должно работать.

Дядя прочитай статью да? Чего ты хочешь добиться вот этим new HashSet<?>(s) с точки зрения параметрического полиморфизма?

>Мне класса каждого второго элемента коллекции начиная с 25-го, то мне насрать на то, что там лежит.

Вот и написано Set<?> s;

При чем тут инстанциирование с wildcard?

уж не говоря о том что ни о каком defensive copy с такой вайлдкардой говорить не приходится.

>Ошибаешся.

Дядя прочитай хотябы элементарный туторил по генерикам, а потом неси чушь. Если у тебя "все параметры генериков" Object-ы тогда пиши Set<Object> а не страдай с вайлдкардами...

Весь смысл параграфа "Constructing wildcard references" можно сформулировать так "если я хочу сделать через жопу то, что не решает никаких задач, то жава мне этого не дает."

Или ты просто хочешь иметь возможность вызывать new HashSet<?>() без всякого отдельного семантического смысла, и чтобы это было тем же самым что и new HashSet<Object>()?

r ★★★★★
()
Ответ на: комментарий от r

>Аффтар опуса на DW почемуто ожидал что если он напишет class A<C extends Cloneable> то у C c; появиться метод clone().


interface I {
  void i();
}


interface J {
  void j();
}


public class T {
  <A extends I, B extends J> void mlya( A a, B b) {
    boolean f = a.equals(b); 
    boolean f1 = b.equals(a); 
    String s = a.getClass().getName(); 
    // и т.п. 
  }
}


Где у I или e J матоды Object-а? 


Про параною с "?" желания говорить НЕТ. И вообще сказал же ХОРОШ ТОЛОЧ ВОДУ В СТУПЕ! Я тебе больше не отвечаю. Адью.

Captain Pedantic.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.