Elavult Java kódok helyett

Fórumok

Egyszerű "iskolafeladatokat" próbálgatok Java-ban:
Az iskola példa egy gombot tesz ki, melyre
változtat a feliraton.

import java.awt.*;
import java.applet.Applet;
public class ap extends Applet {
Button gomb1;
String s;
public void init() {
gomb1 = new Button("Gomb");
add(gomb1);
}
public boolean action (Event e, Object args){
if (e.target == gomb1) s = "alma";
repaint();
return true;
}
public void paint (Graphics g) {
g.drawString("Eredmény: " + s, 50, 80);
}
}

Működik is. A fordító azonban azt mondja, hogy
elavult dolgokat használok:

Fordításkor:

javac -Xlint ap.java
ap.java:16: warning: [deprecation] action(java.awt.Event,java.lang.Object) in java.awt.Component has been deprecated
public boolean action (Event e, Object args){
^
ap.java:5: warning: [serial] serializable class ap has no definition of serialVersionUID
public class ap extends Applet {
^
2 warnings

Kérdésem: mit használjak helyette?

Hozzászólások

a method javadocja meg szokta mondani, hogy mit használj helyette

Először valami Java könyvet, mert borzalmas a program stílusa, egyátalán nem követed a szokásos elnevezési konvenciókat.

Másodszor meg ott írja, hogy melyik osztály melyik metódusa deprecated, amelyet meg lehet nézni:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#action%…

Le is írják, hogy az 1.1 verziótól kezdve célszerű ActionListener segítségével megvalósítani az események kezelését:
Deprecated. As of JDK version 1.1, should register this component as ActionListener on component which fires action events.

Honnan szedtél 1.0 verziójú Java példaprogramot? Két hónap és itt a Java 7...
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Tényleg nem szép, de alapfeladatoknál teljesen mindegy hogy mi a verziószám. De ha magadtól tanulsz, mindenképpen kurrens anyaggal érdemes csak kezdeni.

--
The Net is indeed vast and infinite...
http://gablog.eu

Nem ertek egyet. Java 1.4-nel regebbre visszamenni nem szabad, nincs ertelme. Az mar annyira regi, hogy tulajdonkeppen mar nem is lehet nagyon tudni, miert van meg egyaltalan benne a platformban. Le se szabadna forduljon (marmint az 1.4-nel regebbi tamogato kod).
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Szerintem már 1.5 alatt sem kellene oktatni.

1.4-en nincs foreach:
  for( String s : array ) ...

nincs generics:
  ArrayList<String> arrayList = new ArrayList<String>();

nincs automatikus kasztolás:
  Integer integer = new Integer();
  integer = 2;

nincs annotation
...

Mire az egyetemisták elvégzik az egyetemet, már az 1.5 is elavult lesz. Éppen ezért mindig a legfrissebbet kell oktatni.

Ezzel nem ertek egyet. Nem feltetlen mindig Sun JVM ala kell fejleszteni, az opensource VM-ek pedig elsosorban 1.4 kompatibibilisek.

Az automata castolas pedig valojaban autoboxing. Hulyen is csinaltad, mert a helyes kod ilyen:


Integer myint = 2

A te kodod meg letrehoz egy integer-t (egyaltalan ennek igy van ertelme?!), eldobja, majd csinal egy autoboxingos hozzarendelest. Kabe ez fut le valojaban:


Integer integer = new Integer();
integer.dispose(); // kvazi muvelet
integer = new Integer(2);

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Jesszus... persze.

Azt hiszed, 1.5-tel van telitelepitve a vilag?

A java kodok elvileg hosszutavu rendszereket szolgalnak ki sok helyen, tehat nem 1-2 evente cserelik a programot, hanem pl. 10.

A masik, hogy pl. GWT, vagy J2ME, vagy egyeb embedded java dolgok, ezeknek nincs 1.5-os valtozatuk...

GWT: Már elég régóta ismeri az 1.5-ös szintaxist.

J2ME valóban probléma, de pl. Android korrekt Java 1.5 forrásnyelvet használ.

Egy jól használható megoldás a különböző "retro" fordítók használata, pl.:
retrotranslator

Így a fejlesztésnél ki lehet használni az új funkciókat, de az elkészült szoftver elfut régebbi rendszereken is.

Üdv,
Gergely

Az android nem j2me, hanem dalek. Megcsak nem is JVM felett fut, csak java nyelvu (mint a j# a .net vilagban)

Az informatikai rendszerek tobbsege legacy rendszer, tehat nem az van, hogy te odamesz, kidobod a regi rendszert, es epitesz java 5 vagy barmi alapon ujat, hanem iratnak veled egy uj modult a mar meglevo, kapaszkodj meg, mostani ugyfelunknel pl. java 1.2-es rendszerhez, mert olyan cucchoz van (baromi draga) licencuk, amibe ez van beepitve. Ezen meg a retrotranslator se segit.

Oktatni attól még nem biztos hogy az elavult változatot kellene.

Ha valaki mégis régi JVM-hez készülő projectbe kerül, és valóban tud programozni, nem jelenthet neki komoly gondot az adaptálódás.

Amúgy, még mindig áll a másik kérdésem, !Sun JVM-et használnak valahol? Nem költői kérdés, tényleg érdekel.

Tényleg nem szép, de alapfeladatoknál teljesen mindegy hogy mi a verziószám. De ha magadtól tanulsz, mindenképpen kurrens anyaggal érdemes csak kezdeni.

--
The Net is indeed vast and infinite...
http://gablog.eu

csak a szóhasználat:
"deprecated": magyarul ellenjavallt, azaz működik, de valami okból nem javasolják (nem biztonságos vagy mert következő verziókban már nem fog működni)

"elavult": valószínűleg ha működik az csak hibának tudható be :)

Java eseteben a deprecated inkabb az elavult ertelemben hasznalatos, ha valahol deprecated uzeneteket dobal a javac, az nagyon komolyan veendo. Ugyan van egy csomo ilyen, ami mar tobb verzio ota deprecated, csak meg vagy lustak voltak kivenni, vagy valami belul hasznalja es lustak voltak elrejteni.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Kiegészítésként: ,,deprecated'': elavult, az előző Java változatban és a jelenlegiben benne van, de a következőben már nem lesz, helyette használd a javasoltat.

Ha időbe hosszabb távon akarod a Java alkalmazásodat forrásszinten is karbantartani -- tehát ha pl. nem egyszeri feladatleadásként készítetted el -- akkor érdemes a deprecated jelzést megszívlelni.

G.
===========================================
"Share what you know. Learn what you don't."

deprecated = ellenjavallt
obsolete = elavult

deprecated: rengeteg olyan deprecateddel dolgozom most, a 6-al, ami már a 2-ben deprecated lett

obsoleted, pl:
http://java.sun.com/javase/6/docs/api/java/awt/Event.html

ps: nem tudod honnan írtad amit írtál, és itt: http://java.sun.com/javase/6/docs/api/help-doc.html
szinte ugyanazt látom, egy apró eltéréssel: "may be"
meg "not recommended", ami szintén nem azt jelenti hogy "ne használd"

Egy dolog, hogy az apidoc-ba mi van irva, egy masik dolog, hogy mi a normalis fejlesztoi hozzaallas. A normalis fejlesztoi hozzaallas az, hogy TILOS HASZNALNI ami deprecated, mert karos platformverzio-fuggest viszel a kodba. Plane egy olyant tilos hasznalni, ami mar regebbota deprecated mint 1.4.
Altalanossagban elmondhato, hogy a Java platform fejlesztoi igyekeznek mindig alternativat kinalni a deprekalt kodreszekre, tehat gyakorlatilag semmibe nem kerul elkerulni ezen kodok hasznalatat.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

csak a szóhasználatról, nem pedig a fejlesztői hozzáállásról volt szó, nehogymá' az anglish legyen választékosabb mint a magyar
ők négybetűs szavakkal még a relativitáselméletet is leírják, itt meg az obsolete és deprecated szót is úgy fordítanád hogy tilos :)

Nemtom, en a datumkezeles kornyeken multkor siman hasznaltam deprecated reszt, mert valaszthattam az egyszeru-celszeru regi, es a javasan elb.ott uj API kozul... Mar nem emlekszem, miert epp java kellett, nyilvan ahol lehet, ott valami ertelmesebb nyelvet hasznalok...

(Picit flamy, tudom.. de nekem a PHP is ertelmesebb nyelv :) Lattam en mar PHP-Java vegyes rendszereket eleget, ott irtom bennuk a javat, ahol lehet.. es azert nem garazscegeknel, meg nem pici code-base-nel.)

Érdemes hozzátenni, hogy nincs Obsoleted annotáció csak Deprecated, s ez utóbbit születése óta arra használják a (JDK) fejlesztők, hogy jelöljék vele azokat az osztályokat és metódusokat, amelyek használata valamilyen okból nem célszerű. Az obsoleted dolgok halmaza része a deprecated dolgok halmazának, tehát a deprecated jelölheti az obsoleted dolgokat is, de az obsoleted nem fedi a teljes deprecated halmazt.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD