argon bulletin board
Факултети => Факултет по математика и информатика => Темата е започната от: artanis в 02.12.2005, 16:32:30
-
Здравейте,
Мога ли да компилирам (и изпълнявам) програма, която е писана за SDK 1.4 на SDK 1.5 без да пипам кода (примерно с някава опция).
благодаря!
а.
-
По принцип съвместимостта на версиите, трябва да го позволява, даже без никакви настройки, но на практика не винаги е така...
Доколкото знам, няма такава опция и трябва да променяш кода, но не съм абсолютно сигурен.
-
Не би трябвало да имаш проблеми при компилиране и изпълнение на сорс код писан за JDK 1.4. JDK 5.0 предоставя автоматична съвместимост за приложения написани на по-стари версии. Проблем по време на компилация би могъл да възникне единствено ако някъде в кода е използвана думата enum като идентификатор, тъй като в JDK 5.0 enum вече e ключова дума.
-
Здравейте,
Благодаря за бързите отговори. Мен ме интересуваше заради колекциите, по-скоро generics. Всичките ми програми ползват колекции, но половината са на версията без generics, а другата на по-новата - с generics.
При компилиране на код без generics новият компилатор казва, че има грешка при обхождането на колекцията, а старият компилатор при компилиране на код с generics казва: какво е това generics.
А компилирани вече програми дали биха могли да се изпълняват на последната версия?
поздрави:
Атанас Чанев
-
spored sun syvmestimosta e 100% osven enum kakto spomena kas problema s enum e iasen veche dobaviha enum a enum beshe nai chesto izpolzvano ime za obekt ot tip Enumeration taka che malko kofti
inache neshto pisano za j2 sdk 1.4.2 ili 1.4 i kompilirano na 1.5 nqma da dade problemi btw ako nqkoq biblioteka ot 1.5 te pritesnqva zemi si po starata biblioteka ot 1.4 .
inache i j2re-tata nqma problem poprincip neshto kompilirano s 1.4 shte varvi s 1.5 (pak kazvam ako nqma v sorsa enum) .
inache v foruma imashe edna mn hubava tema na nikolai manchev za novite neshta v 1.5 moje da gi poglednesh .
Az predimno polzvam programi kompilirani s 1.4 i gi puskam s 1.5 do sega samo programata (JRC EDITOR) mi e pravila problem v smisal s 1.5 virtualna mashina garmeshe neshto .
-
При компилиране на код без generics новият компилатор казва, че има грешка при обхождането на колекцията
Може ли да постнеш грешката?
-
Здрасти Phyz,
В случая не съм компилирал нещо, но (принципно) когато обхождам ArrayList, който съдържа някакви обекти, след като видя какъв обект ми е ArrayList-a, мога да извикам някой негов метод. Но за да извикам този метод пред скоби трябва да укажа какъв ми е обектът напр. ((myObject)al.get(i)).myMethod(), а не просто al.get(i).myMethod(). Грешката е нещо от сорта: обектът Object няма метод myMethod().
Но ако компилираните вече програми вървят, както казва Joke (cheers Joke), май не е чак толкова лошо. На мен лично тази разлика ми е много неудобна.
поздрави:
Атанас Чанев
-
((myObject)al.get(i)).myMethod()
tva sha varvi i v 2ta sluchaiq.
prosto v j2se 1.5 moje da napravish
List<myObject> al=new ArrayList<myObject>();
po tozi nachin akto vadish avtomantichno obektite shte sa ot tip myObject a ne obJECT i zapis ot vida
al.get(i).myMethod() shte raboti.
i vse pak staria nachin si raboti i na 1.5
voveche info za 1.5
http://manchev.org/cms/index.php?option=com_content&task=view&id=13&Itemid=29
-
JOKe,
Тогава прегледах статията на Николай Манчев. Работя с generics просто казвам какво не ми е удобно.
Декларирам колекциите си по този начин от 1.5 нагоре, а в старите версии работя по стария начин. В новите версии доколкото си спомням компилаторът дава грешка при деклариране от вида:
ArrayList al=new ArrayList();
И последващ опит да се сложи вътре обект от тип myObject
Колеги, моля да пишете в тази тема само ако сте изпробвали нещо. Не мисля, че е много удачно да цитираме какво пише в техническите доклади на сън или презентацията на Николай Манчев за новостите в 1.5 версия.
На мен би ми било най-удобно в новата версия декларирането на ArrayList да става и по стария начин, а да може да се обхожда по новия начин (обаче това желание е твърде Perl-повлияно). ;)
поздрави:
Атанас Чанев
-
Декларирам колекциите си по този начин от 1.5 нагоре, а в старите версии работя по стария начин. В новите версии доколкото си спомням компилаторът дава грешка при деклариране от вида:
ArrayList al=new ArrayList();
И последващ опит да се сложи вътре обект от тип myObject
Не знам на кое казваш точно "компилатор". Код от този вид би трябвало да се компилира перфектно от компилаторите за Java от версия 1.2 насам. Точно това ми чудно - каква точно грешка ти е дал въпросния компилатор защото при мен това си се компилира и върви като пушка. Само еклипса му дърпа една жълта джизга отдолу и пише че такива работи в 1.5 не трябва да се правят.
Честно казано съмняавам се SUN да са счупили код от тоя тип защото това си беше нормалния начин за използване на колекции от край време...
Малко offtopic. Аз като цяло съм против веригите от типа:
a.blah().blioh().bliuh()
Не знаеш на коя точно стъпка някои метод може да ти върне null. Освен това колекциите по-добре да ги обхождаш с Iterator. Ако обхождаш примерно LinkedList с ((myObject) al.get(i)).myMethod() можеш да си представиш какво става... Та затова по добре прави така:
MyObject o;
for (Iterator it = al.iterator(); it.hasNext();) {
o = (MyObject) it.next();
if (o != null) {
o.myMethod();
} else {
// boom...
}
}
Малко повече писане е обаче си връзваш гащите от всякъде (от гледна точка на null pointer ите и неефективните алгоритми за обхождане).
-
Що не пробваш да го компилираш с 1.5 с target 1.4 и да видиш какво разправя.
Поздрави,
Николай Манчев
-
artanis : на 1.5 с сънския компилатор който си идва с СДК-то при написване на
ArrayList a=new ArrayList();
всичко си е ок.
-
ArrayList a=new ArrayList(); работи 100% при JDK 1.5. Никой от хората, отговорили на тази тема не говори само на теория. Всички имаме доста практика! :-)