argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: бързо въпросче за Java  (Прочетена 2772 пъти)

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
бързо въпросче за Java
« -: 02.12.2005, 16:32:30 »

Здравейте,

Мога ли да компилирам (и изпълнявам) програма, която е писана за SDK 1.4 на SDK 1.5 без да пипам кода (примерно с някава опция).

благодаря!

а.
Активен

BORIME4KA

  • Неактивен Неактивен
  • Публикации: 86
    • http://psabev.blogspot.com
Re: бързо въпросче за Java
« Отговор #1 -: 02.12.2005, 16:42:51 »

По принцип съвместимостта на версиите, трябва да го позволява, даже без никакви настройки, но на практика не винаги е така...
Доколкото знам, няма такава опция и трябва да променяш кода, но не съм абсолютно сигурен.
Активен

Kas

  • Неактивен Неактивен
  • Публикации: 46
Re: бързо въпросче за Java
« Отговор #2 -: 02.12.2005, 17:13:11 »

Не би трябвало да имаш проблеми при компилиране и изпълнение на сорс код писан за JDK 1.4. JDK 5.0 предоставя автоматична съвместимост за приложения написани на по-стари версии. Проблем по време на компилация би могъл да възникне единствено ако някъде в кода е използвана думата enum като идентификатор, тъй като в JDK 5.0 enum вече e ключова дума.
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
Re: бързо въпросче за Java
« Отговор #3 -: 02.12.2005, 17:23:17 »

Здравейте,

Благодаря за бързите отговори. Мен ме интересуваше заради колекциите, по-скоро generics. Всичките ми програми ползват колекции, но половината са на версията без generics, а другата на по-новата - с generics.

При компилиране на код без generics новият компилатор казва, че има грешка при обхождането на колекцията, а старият компилатор при компилиране на код с generics казва: какво е това generics.

А компилирани вече програми дали биха могли да се изпълняват на последната версия?

поздрави:
Атанас Чанев
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: бързо въпросче за Java
« Отговор #4 -: 02.12.2005, 21:41:22 »

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 .
Активен

Phyz

  • Неактивен Неактивен
  • Публикации: 45
Re: бързо въпросче за Java
« Отговор #5 -: 02.12.2005, 23:02:55 »

При компилиране на код без generics новият компилатор казва, че има грешка при обхождането на колекцията

Може ли да постнеш грешката?
Активен
Quidquid latine dictum sit, altum sonatur.
Whatever is said in Latin sounds profound.

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
Re: бързо въпросче за Java
« Отговор #6 -: 02.12.2005, 23:45:23 »

Здрасти Phyz,

В случая не съм компилирал нещо, но (принципно) когато обхождам ArrayList, който съдържа някакви обекти, след като видя какъв обект ми е ArrayList-a, мога да извикам някой негов метод. Но за да извикам този метод пред скоби трябва да укажа какъв ми е обектът напр. ((myObject)al.get(i)).myMethod(), а не просто al.get(i).myMethod(). Грешката е нещо от сорта: обектът Object няма метод myMethod().

Но ако компилираните вече програми вървят, както казва Joke (cheers Joke), май не е чак толкова лошо. На мен лично тази разлика ми е много неудобна.

поздрави:
Атанас Чанев
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: бързо въпросче за Java
« Отговор #7 -: 03.12.2005, 14:25:21 »

((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
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
Re: бързо въпросче за Java
« Отговор #8 -: 03.12.2005, 14:51:59 »

JOKe,

Тогава прегледах статията на Николай Манчев. Работя с generics просто казвам какво не ми е удобно.

Декларирам колекциите си по този начин от 1.5 нагоре, а в старите версии работя по стария начин. В новите версии доколкото си спомням компилаторът дава грешка при деклариране от вида:

ArrayList al=new ArrayList();

И последващ опит да се сложи вътре обект от тип myObject

Колеги, моля да пишете в тази тема само ако сте изпробвали нещо. Не мисля, че е много удачно да цитираме какво пише в техническите доклади на сън или презентацията на Николай Манчев за новостите в 1.5 версия.

На мен би ми било най-удобно в новата версия декларирането на ArrayList да става и по стария начин, а да може да се обхожда по новия начин (обаче това желание е твърде Perl-повлияно). ;)

поздрави:
Атанас Чанев
Активен

Phyz

  • Неактивен Неактивен
  • Публикации: 45
Re: бързо въпросче за Java
« Отговор #9 -: 03.12.2005, 16:05:28 »

Декларирам колекциите си по този начин от 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 ите и неефективните алгоритми за обхождане).
Активен
Quidquid latine dictum sit, altum sonatur.
Whatever is said in Latin sounds profound.

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org
Re: бързо въпросче за Java
« Отговор #10 -: 06.12.2005, 17:49:47 »

Що не пробваш да го компилираш с 1.5 с target 1.4 и да видиш какво разправя.

Поздрави,

Николай Манчев
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: бързо въпросче за Java
« Отговор #11 -: 07.12.2005, 10:51:01 »

artanis : на 1.5 с сънския компилатор който си идва с СДК-то при написване на
ArrayList a=new ArrayList();
всичко си е ок.
Активен

Kas

  • Неактивен Неактивен
  • Публикации: 46
Re: бързо въпросче за Java
« Отговор #12 -: 07.12.2005, 12:53:32 »

ArrayList a=new ArrayList(); работи 100% при JDK 1.5. Никой от хората, отговорили на тази тема не говори само на теория. Всички имаме доста практика! :-)
Активен