Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Novinky v Javě aneb Tygří spáry

Zřejmě již koncem tohoto roku uvolní společnost Sun Microsystems, Inc. beta verzi Java Platform Standard Edition 1.5 (codename Tiger). Její autoři tvrdí, že jde o největší zásah do jazyka Java od jeho vzniku. Slibují kratší a čitelnější kód, samozřejmě při zachování kompatibility s předchozími verzemi. Na co se můžete těšit, vám odpoví následující článek.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Opravdu nová Java

Až dosud byly do nových verzí, až na výjimky (např. vnitřní a vnořené třídy, později assertions), přidávány balíky, které rozšiřovaly funkčnost dosud nepokrytým směrem, jako například java.nio a java.util.logging ve verzi 1.4, spolu s vylepšováním JVM a překladače. V nové verzi 1.5 však přibudou přímo nové konstrukty (novým klíčovým slovům se autoři až na jedno vyhnuli), jejichž cílem je zejména zpřehlednit kód a přenést psaní rutinních částí kódu z programátora na překladač. Programátor se tak vyvaruje některých zbytečných chyb a některé typové kontroly bude možné oproti dřívější verzi provést již při překladu.

Mezi hlavní novinky nové verze mají patřit:

  • Generické datové typy
  • Rozšířený cyklus for
  • Autoboxing/Unboxing
  • Výčtový typ
  • Static import
  • Proměnný počet parametrů
  • Metadata

Navíc má být v nové verzi přepracován a vylepšen paměťový model.

Následují části, které stručně přiblíží tato nová vylepšení jazyka. Rozhodně se nejedná o vyčerpávající popis – k tomu by bylo třeba desítek stran a není to ani posláním tohoto článku. Pro vysvětlení jsou použity jednoduché části kódu, které (snad) usnadní pochopení nových principů.

Generické datové typy

Tato poměrně značná inovace má zajistit zejména compile-time typovou kontrolu pro prvky kontejneru. Návrh je opravdu rozsáhlý, a proto se zaměříme jen na hlavní myšlenky. Základem je možnost definovat parametrizovaný typ (do určité míry jde o obdobu šablon v C++). Následuje jednoduchý příklad definice rozhraní a třídy, které používají generické typy:

interface Storage<A>{
  A get();
  void put(A element);
}
...
class Test<A> implements Storage<A>{
  private A test;
  public A get(){
    return test;
  }
  public void put(A element){
    test = element;
  }
}

Použití by pak mohlo být následující:

Storage<Integer> s = new Test<Integer>();
s.put(new Integer(7));
...
System.out.println(s.get().intValue());

Je zřejmé, že generické typy naleznou uplatnění zejména pro kontejnery (v souvislosti s tím také bude upraveno API některých tříd v balíku java.util). Pokud není parametrický typ při vytváření instance uveden, použije se java.lang.Object, což zajistí kompatibilitu již existujícího kódu. Jako parametr nebude možné uvést primitivní datový typ, a to z důvodu zachování odděleného používání primitivních a referenčních datových typů v Javě.

Při použití pro kontejnery je tedy hlavní výhodou kontrola typu vkládaných prvků. U prvků získaných z kontejneru naopak odpadá přetypování z typu Object na skutečně uložený typ. Dostatečně ilustrativní by měl být následující příklad, kdy procházíme kolekci obsahující prvky typu String pomocí iterátoru a odstraňujeme objekty specifických vlastností. Nejprve klasická v současnosti používaná konstrukce:

static void removeHello(Collection c){
  for (Iterator i = c.iterator(); i.hasNext();){
    String s = (String) i.next();
    if(s.equals("Hello")) i.remove();
  }
}

Následuje úprava s využitím generických datových typů:

static void removeHello(Collection<String> c){
  for (Iterator<String> i = c.iterator();
       i.hasNext();)
    if (i.next().equals("Hello")) i.remove();
}

Možností je samozřejmě mnohem více. Lze definovat metody, které mají jako návratový typ uveden generický typ, použít jej lze i ve vnitřních třídách apod.

Rozšířený cyklus for

Jde vlastně o nový příkaz, který se dá popsat jako foreach – in. Základní syntaxe je:

for( Type Identifier : Expression )
  Statement

Expression přitom musí být pole nebo musí implementovat nové rozhraní java.lang.Ite­rable. Zároveň se předpokládá změna rozhraní java.util.Collection tak, aby rozšiřovalo nebo implementovalo java.lang.Ite­rable. Základním přínosem tedy je, že při filtrování kontejneru odpadá nutnost volat metody iterátoru. Nejsnadnější bude opět uvést srovnávací příklad. V současnosti provedeme akci pro všechny prvky například takto:

void printHosts(Collection c){
  for (Iterator i = c.iterator(); i.hasNext();){
    URL url = (URL) i.next();
    System.out.println(url.getHost());
  }
}

To lze pomocí rozšířeného cyklu for zapsat například takto:

void printHosts(Collection c){
  for (Object o : c)
    System.out.println(((URL) o).getHost());
}

Při současném použití generických datových typů je pak možné celý zápis upravit dokonce na:

void printHosts(Collection<URL> c){
  for (URL url : c)
    System.out.println(url.getHost());
}

Je vidět, že výsledný kód je přehlednější a zároveň není na programátárovi požadováno, aby psal často se opakující a triviální část kódu.

Autoboxing/unboxing

Ve stejném duchu jako předchozí úpravy je i úprava tato. Protože jazyk Java má jak primitivní typy, tak reference na objekty, jsou pro primitivní typy definovány obalové objektové typy. Dosud však byl převod mezi nimi poměrně komplikovaný.

Při použití autoboxingu/un­boxingu se zápis výrazně zkrátí a zpřehlední. Obalovacímu typu lze přiradit přímo hodnotu typu, který je obalen. Přiřazení je možné provést i naopak. Předpoklad pro finální verzi je, že není možné převést hodnotu null na primitivní typ.

Je zřejmé, že použití této funkce se opět uplatní zejména při práci s kontejnery. Na něco takového jsem čekal již dlouho ;). Uveďme srovnávací příklad. Nyní:

int sumNumbers(List c){
  int sum;
  for (Iterator i = c.iterator(); i.hasNext();){
    Integer number = (Integer) i.next();
    sum += number.intValue();
  }
  return sum;
}

Bystrý čtenář navíc zjistil, že předchozí kód samozřejmě může generovat ClassCastException. Při použití dosud uvedených konstrukcí a autoboxingu/un­boxingu pak kód bude:

void sumNumbers(List<Integer> c){
  int sum;
  for (Integer number : c)
    sum += number;
  return sum;
}

Je vidět, že kód je kratší, přehlednější a kontrola typu proběhne již při překladu.

Výčtový typ

Další poměrně rozsáhlou změnou je zavedení výčtového typu. Jeho specifikace zabírá několik stránek, proto se ve stručnosti pokusím uvést hlavní myšlenky.

Výčtový typ je specifikován tak, že neporušuje zásady objektově orientovaného programování. Jde vlastně o třídu, která exportuje „self-typed“ (samotypované ;)) konstanty a nemá veřejný konstruktor. Výhodou je, že takto definované konstanty lze požít v přepínači switch i v kontejnerech, například jako klíč pro HashMap. Protože jde vlastně o třídu, je ve výčtovém typu možné definovat vlastní atributy a metody (zřejmě využijí jen zkušení programátoři). Výčtové typy budou mít společného předka java.lang.Enum a implementují rozhraní SerializableComparable.

Nejjednodušší (a zřejmě také nejčastější) definice výčtového typu bude například:

public enum Color{ RED, GREEN, BLUE }

Lze ale například také specifikovat jak se budou instance výčtového typu vytvářet:

public enum Compression{
  LOW(0.9), GOOD(0.5), EXCELLENT(0.3);
  private final double compr;
  Compression(double compr){
    this.compr = compr;
  }
  public double value() {
    return compr;
  }
}

Každý výčtový typ má také atribut VALUES, ve kterém je neměnitelný List položek výčtu v pořadí, v jakém byly definovány. Toho využívá následující příklad, který zároveň ukazuje použití přepínače:

for (Compression c : Compression.VALUES){
  switch(c){
    case Compression.LOW:
      System.out.println("Low: " + c.value());
      break;
    case Compression.GOOD:
      System.out.println("Good: " + c.value());
      break;
    case Compression.EXCELLENT:
      System.out.println("Excellent: " + c.value());
      break;
  }
}

Static import

Cílem tohoto zjednodušení má být opět zpřehlednění kódu. Jde vlastně o importování statických členů tříd, díky čemuž již není nutné uvádět u takových členů jméno třídy, ve které jsou obsaženy. Namísto

Math.abs(x);

můžeme tedy použít

import static java.lang.Math.*;
...
abs(x);

Použijeme-li výčtový typ pro definování vlastních konstant, lze je pak použít pomocí statického importu následujícím způsobem:

public enum TVColors{RED, GREEN, BLUE};
...
import static TVColors.*;
...
int color = RED;

Proměnný počet parametrů

Naprostou novinkou je v Javě také možnost definovat metodu s proměnným počtem parametrů. Základní syntaxi i práci s jednotlivými položkami nejlépe vysvětlí následující příklad, který ukazuje definici funkce  printf:

public static void printf(String format, Object... args){
  int i = 0;
  for (char c : format.toCharArray()){
    if (c == '%')
      System.out.print(args[i++]);
    else if (c == '\n')
      System.out.println();
    else
      System.out.print(c);
  }
}


Jako typ proměnného počtu parametrů (v příkladu Object) je možno použít jakýkoliv typ, včetně primitivního. Klauzuli Typ... argument lze pro danou metodu použít samozřejmě jen jednou a na konci seznamu parametrů. Skutečné parametry se pak při volání oddělují (klasicky) čárkou.

Metadata

Metadata je koncept, který by měl opět ulehčit život programátorům. V moderních API je totiž programátor nucen, aby splnil jejich požadavky, napsat určitou část kódu „zbytečně“. Uveďme příklad:

import java.rmi.*;
public interface DoAction extends Remote{
  public Object action() throws RemoteException;
}
public class DoActionImpl
 extends UnicastRemoteObject implements DoAction{
  public Object action() throws RemoteException{
    //implementace
  }
}

Definice rozhraní je v podstatě triviální. Navíc, změní-li se parametry volané metody, bude třeba upravit jak rozhraní, tak implementující třídu. Právě od těchto těžkostí by měla pomoci metadata.

Pomocí metadatového příkazu @Remote by se uvedená část kódu zapsala následujícím způsobem:

import java.rmi.*;
public class DoAction{
  @Remote public Object action(){
    //implementace
  }
}

Použitý vývojový nástroj by pak sám zajistil generování potřebného rozhraní a překlad. Koncept metadat navíc poskytuje kostru pro dodavatele vývojových nástrojů pro definování atributů. Například jsou již definovány metadatové příkazy pro Java Web Services. Sun předpokládá v této oblasti rozsáhlou činnost.

Závěr

Každý, kdo někdy v Javě napsal více než 100 řádků, jistě uvítá (tedy alespoň podle mého názoru) navržené změny. S úsporou napsaného kódu ubyde programátorských chyb a zároveň se zlepší čitelnost programů. Část odpovědnosti se tak přesune na kompilátor, který by měl nové konstrukce efektivně přeložit. Zároveň však zůstává zachována základní vlastnost Javy, tedy kompatibilita.

Všechny uvedené příklady kromě metadat jsem vyzkoušel v „EarlyAccess“ verzi kompilátoru. Stáhnout si jej můžete (po registraci) ze stránek java.sun.com.

Literatura

Návrh nových rozšíření jazyka
jcp.org/aboutJa­va/communitypro­cess/jsr/tiger/

Rozhovor s J. Blochem, softwarovým architektem Sun Microsystems, Inc.
java.sun.com/fe­atures/2003/05/­bloch_qa.html

davame_internetu_obsah
       

Adding Generics to the Java Programming Language
www.lcc.uma.es/do­cencia/ETSIIn­f/isd/AddingGe­nericsToJava(sli­des).pdf


Java je registrovaná obchodní známka Sun Microsystems, Inc.

Školení: Linux – Firewall, Samba, VPN

Na třídenním školení se naučíte nainstalovat a spravovat Firewall a Router, SAMBA Doménový a Souborový server. Dále si zprovozníte vlastní, zabezpečený VPN server.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,92

Přehled názorů

jeste daleka cesta
Martin Povolný 7. 11. 2003 08:12
Nový
├ 
Re: jeste daleka cesta
Mira 7. 11. 2003 12:50
Nový
├ 
Re: jeste daleka cesta
pf 7. 11. 2003 13:50
Nový
│
└ 
Re: jeste daleka cesta
Jean 7. 11. 2003 23:45
Nový
│
 
└ 
Re: jeste daleka cesta
Aben Siatris 8. 11. 2003 19:52
Nový
├ 
Re: jeste daleka cesta
HK 7. 11. 2003 15:00
Nový
│
└ 
Re: jeste daleka cesta
Wejn 7. 11. 2003 17:25
Nový
└ 
Re: jeste daleka cesta
tomashv 8. 11. 2003 02:01
Nový
 
└ 
Re: jeste daleka cesta
Jean 8. 11. 2003 10:08
Nový
 
 
├ 
Re: jeste daleka cesta
tomashv 9. 11. 2003 02:03
Nový
 
 
│
└ 
Re: jeste daleka cesta
sss 11. 11. 2003 10:36
Nový
 
 
└ 
Re: jeste daleka cesta
Bohouš 13. 1. 2004 22:16
Nový
bez titulku
anonymní uživatel 7. 11. 2003 08:24
Nový
└ 
Re: Pomalych?
Dirigent 7. 11. 2003 09:45
Nový
 
└ 
Re: Pomalych?
zoul 7. 11. 2003 09:57
Nový
 
 
├ 
Re: Pomalych?
anonym 7. 11. 2003 10:12
Nový
 
 
│
├ 
Re: Pomalych?
Pichi 7. 11. 2003 10:16
Nový
 
 
│
│
└ 
Re: Pomalych?
Bilbo 7. 11. 2003 13:44
Nový
 
 
│
└ 
Re: Pomalych?
Dirigent 7. 11. 2003 10:52
Nový
 
 
├ 
Re: Pomalych?
Dirigent 7. 11. 2003 10:39
Nový
 
 
│
├ 
Re: Pomalych?
Milan Sorm 8. 11. 2003 17:33
Nový
 
 
│
└ 
Re: Pomalych?
Aben Siatris 8. 11. 2003 20:02
Nový
 
 
├ 
Re: Pomalych?
Sickboy 7. 11. 2003 12:55
Nový
 
 
│
└ 
Re: Pomalych?
vrabcak 7. 11. 2003 17:17
Nový
 
 
│
 
└ 
Re: Pomalych?
Sat 7. 11. 2003 18:11
Nový
 
 
│
 
 
├ 
Re: Pomalych?
Karel Tejnora 7. 11. 2003 19:41
Nový
 
 
│
 
 
│
└ 
Re: Pomalych?
vrabcak 7. 11. 2003 21:09
Nový
 
 
│
 
 
└ 
Re: Pomalych?
Milan Zamazal 8. 11. 2003 21:27
Nový
 
 
│
 
 
 
└ 
Re: Pomalych?
Sat 10. 11. 2003 11:06
Nový
 
 
├ 
Re: Pomalych?
Jirka Hradil 8. 11. 2003 02:08
Nový
 
 
│
└ 
Re: Pomalych?
Milan Sorm 8. 11. 2003 17:39
Nový
 
 
│
 
└ 
Re: Pomalych?
Jirka Hradil 9. 11. 2003 15:50
Nový
 
 
├ 
Re: Pomalych?
Aben Siatris 8. 11. 2003 19:54
Nový
 
 
└ 
Re: Pomalych?
Radim 10. 11. 2003 22:59
Nový
bez titulku
xxxx 7. 11. 2003 09:07
Nový
└ 
Re:
astar 7. 11. 2003 11:56
Nový
 
└ 
Re:
hynek 7. 11. 2003 12:08
Nový
 
 
├ 
Re:
astar 7. 11. 2003 12:22
Nový
 
 
└ 
Re:
Sickboy 7. 11. 2003 12:42
Nový
 
 
 
└ 
Re:
Jarda 7. 11. 2003 13:32
Nový
Složitost
Milan 7. 11. 2003 10:50
Nový
├ 
Re: Složitost
Martin 7. 11. 2003 11:42
Nový
│
├ 
Re: Složitost
astar 7. 11. 2003 12:07
Nový
│
│
└ 
Re: Složitost
petr 7. 11. 2003 12:42
Nový
│
│
 
├ 
Re: Složitost
Sickboy 7. 11. 2003 12:59
Nový
│
│
 
├ 
Re: Složitost
Jarda 7. 11. 2003 13:08
Nový
│
│
 
├ 
Re: Složitost
astar 7. 11. 2003 13:39
Nový
│
│
 
└ 
Re: Složitost
Bilbo 7. 11. 2003 13:50
Nový
│
│
 
 
└ 
Re: Složitost
Jirka Hradil 8. 11. 2003 01:49
Nový
│
│
 
 
 
└ 
Re: Složitost
B-at 10. 11. 2003 11:12
Nový
│
├ 
Re: Složitost
Snehulda 7. 11. 2003 12:44
Nový
│
└ 
Re: Složitost
Zdenek 7. 11. 2003 13:16
Nový
│
 
└ 
Re: Složitost
Jarda 7. 11. 2003 13:51
Nový
│
 
 
├ 
Re: Složitost
Martin 7. 11. 2003 14:05
Nový
│
 
 
│
└ 
Re: Složitost
Mat 7. 11. 2003 14:25
Nový
│
 
 
│
 
└ 
Re: Složitost
Jarda 7. 11. 2003 14:56
Nový
│
 
 
│
 
 
└ 
Re: Složitost
Mat 7. 11. 2003 15:59
Nový
│
 
 
└ 
Re: Složitost
Mat 7. 11. 2003 14:52
Nový
│
 
 
 
└ 
Re: Složitost
Jarda 7. 11. 2003 15:22
Nový
│
 
 
 
 
└ 
Re: Složitost
Mat 7. 11. 2003 17:27
Nový
├ 
Re: Složitost
astar 7. 11. 2003 12:12
Nový
│
├ 
Re: Složitost
Sickboy 7. 11. 2003 12:44
Nový
│
└ 
Re: Složitost
petr 7. 11. 2003 12:48
Nový
│
 
└ 
Re: Složitost
Zdenek 7. 11. 2003 13:25
Nový
└ 
Re: Složitost
Mira 7. 11. 2003 12:45
Nový
 
├ 
Re: Složitost
Mat 7. 11. 2003 15:02
Nový
 
│
└ 
Re: Složitost
tomashv 8. 11. 2003 02:14
Nový
 
└ 
Re: Složitost
Milan Zamazal 8. 11. 2003 21:37
Nový
Pochyby
hisaak 7. 11. 2003 12:57
Nový
└ 
Re: Pochyby
Zdenek 7. 11. 2003 13:37
Nový
jazyk pro debily
lamer 7. 11. 2003 13:21
Nový
├ 
Re: jazyk pro debily
Sickboy 7. 11. 2003 13:25
Nový
│
└ 
Re: jazyk pro debily
Quaak 9. 11. 2003 07:53
Nový
├ 
Re: jazyk pro debily
Ondra Nekola 7. 11. 2003 13:29
Nový
├ 
Re: jazyk pro debily
Ondra Nekola 7. 11. 2003 13:37
Nový
├ 
Re: jazyk pro debily
Dirigent 7. 11. 2003 13:50
Nový
├ 
Re: jazyk pro debily
karel 7. 11. 2003 14:00
Nový
├ 
Re: jazyk pro debily
Mat 7. 11. 2003 14:10
Nový
├ 
Re: jazyk pro debily
ondrej 7. 11. 2003 15:52
Nový
├ 
Re: jazyk pro debily
Michal Kašpar 7. 11. 2003 16:11
Nový
├ 
Re: jazyk pro debily
Jirka Hradil 8. 11. 2003 01:54
Nový
├ 
Re: jazyk pro debily
lamer 8. 11. 2003 12:29
Nový
└ 
Re: jazyk pro debily
binary__runner 12. 11. 2003 09:44
Nový
bez titulku
KLoK 7. 11. 2003 13:28
Nový
├ 
Re:
Murphy 7. 11. 2003 15:09
Nový
│
└ 
Re:
Dirigent 7. 11. 2003 16:44
Nový
│
 
└ 
Re:
Wejn 7. 11. 2003 17:44
Nový
│
 
 
└ 
Re:
gmmns 8. 11. 2003 12:45
Nový
│
 
 
 
├ 
Re:
Milan Sorm 8. 11. 2003 17:47
Nový
│
 
 
 
│
├ 
Re:
Aben Siatris 8. 11. 2003 20:13
Nový
│
 
 
 
│
├ 
Re:
gmmns 10. 11. 2003 22:40
Nový
│
 
 
 
│
└ 
Re:
Jirka Hradil 11. 11. 2003 21:55
Nový
│
 
 
 
└ 
Re:
Wejn 8. 11. 2003 20:40
Nový
└ 
Re:
Quaak 9. 11. 2003 07:57
Nový
Importy
HK 7. 11. 2003 15:04
Nový
├ 
Re: Importy
tomashv 8. 11. 2003 02:23
Nový
└ 
Re: Importy
Jirka Hradil 13. 11. 2003 21:12
Nový
Java kopiruje .NET
Honza 7. 11. 2003 15:19
Nový
├ 
Re: Java kopiruje .NET
Wejn 7. 11. 2003 17:45
Nový
│
├ 
Re: Java kopiruje .NET
Petr 7. 11. 2003 20:37
Nový
│
│
└ 
Re: Java kopiruje .NET
Ondra Nekola 10. 11. 2003 10:44
Nový
│
└ 
Re: Java kopiruje .NET
Marek 7. 11. 2003 20:45
Nový
│
 
└ 
Re: Java kopiruje .NET
LiLu 10. 11. 2003 17:05
Nový
└ 
Re: Java kopiruje .NET
Mate 7. 11. 2003 18:03
Nový
 
├ 
Re: Java kopiruje .NET
Karel Tejnora 7. 11. 2003 20:05
Nový
 
│
└ 
Re: Java kopiruje .NET
Marek 7. 11. 2003 20:40
Nový
 
│
 
└ 
Re: Java kopiruje .NET
Bill 8. 11. 2003 02:32
Nový
 
│
 
 
└ 
Re: Java kopiruje .NET
Marek 8. 11. 2003 11:44
Nový
 
│
 
 
 
└ 
Re: Java kopiruje .NET
tomashv 9. 11. 2003 01:56
Nový
 
└ 
Re: Java kopiruje .NET
ondrej 7. 11. 2003 23:45
Nový
 
 
├ 
Re: Java kopiruje .NET
Petr 8. 11. 2003 11:53
Nový
 
 
│
├ 
Re: Java kopiruje .NET
sss 8. 11. 2003 20:49
Nový
 
 
│
│
├ 
Re: Java kopiruje .NET
Petr 8. 11. 2003 21:21
Nový
 
 
│
│
│
└ 
Re: Java kopiruje .NET
sss 9. 11. 2003 00:47
Nový
 
 
│
│
└ 
Re: Java kopiruje .NET
Vaše jméno 8. 11. 2003 23:56
Nový
 
 
│
│
 
├ 
Re: Java kopiruje .NET
sss 9. 11. 2003 00:46
Nový
 
 
│
│
 
│
└ 
Re: Java kopiruje .NET
Vaše jméno 9. 11. 2003 07:22
Nový
 
 
│
│
 
├ 
Re: Java kopiruje .NET
sss 9. 11. 2003 01:07
Nový
 
 
│
│
 
│
└ 
Re: Java kopiruje .NET
Vaše jméno 9. 11. 2003 07:48
Nový
 
 
│
│
 
│
 
├ 
Re: Java kopiruje .NET
sss 9. 11. 2003 10:06
Nový
 
 
│
│
 
│
 
│
├ 
Re: Java kopiruje .NET
Vaše jméno 9. 11. 2003 15:33
Nový
 
 
│
│
 
│
 
│
│
└ 
Re: Java kopiruje .NET
sss 9. 11. 2003 18:06
Nový
 
 
│
│
 
│
 
│
│
 
└ 
Re: Java kopiruje .NET
zephir 9. 11. 2003 23:21
Nový
 
 
│
│
 
│
 
│
│
 
 
├ 
Re: Java kopiruje .NET
ssss 10. 11. 2003 00:15
Nový
 
 
│
│
 
│
 
│
│
 
 
│
└ 
Re: Java kopiruje .NET
zephir 10. 11. 2003 12:18
Nový
 
 
│
│
 
│
 
│
│
 
 
│
 
└ 
Re: Java kopiruje .NET
ssss 10. 11. 2003 13:31
Nový
 
 
│
│
 
│
 
│
│
 
 
│
 
 
└ 
Re: Java kopiruje .NET
zephir 10. 11. 2003 15:33
Nový
 
 
│
│
 
│
 
│
│
 
 
├ 
Re: Java kopiruje .NET
B-at 10. 11. 2003 11:38
Nový
 
 
│
│
 
│
 
│
│
 
 
└ 
Re: Java kopiruje .NET
lzap 10. 11. 2003 12:41
Nový
 
 
│
│
 
│
 
│
│
 
 
 
└ 
Re: Java kopiruje .NET
zephir 10. 11. 2003 16:41
Nový
 
 
│
│
 
│
 
│
│
 
 
 
 
└ 
Re: Java kopiruje .NET
lzap 15. 11. 2003 13:39
Nový
 
 
│
│
 
│
 
│
├ 
Re: Java kopiruje .NET
lzap 10. 11. 2003 12:45
Nový
 
 
│
│
 
│
 
│
│
└ 
Re: Java kopiruje .NET
zephir 10. 11. 2003 16:57
Nový
 
 
│
│
 
│
 
│
│
 
└ 
Re: Java kopiruje .NET
lzap 15. 11. 2003 13:39
Nový
 
 
│
│
 
│
 
│
└ 
Re: Java kopiruje .NET
agent 14. 11. 2003 21:51
Nový
 
 
│
│
 
│
 
├ 
Re: Java kopiruje .NET
sss 9. 11. 2003 10:09
Nový
 
 
│
│
 
│
 
└ 
Re: Java kopiruje .NET
lzap 10. 11. 2003 12:45
Nový
 
 
│
│
 
│
 
 
└ 
Re: Java kopiruje .NET
zephir 10. 11. 2003 17:09
Nový
 
 
│
│
 
└ 
Re: Java kopiruje .NET
binary__runner 12. 11. 2003 10:09
Nový
 
 
│
│
 
 
└ 
Re: Java kopiruje .NET
Vaše jméno 12. 11. 2003 19:33
Nový
 
 
│
└ 
Re: Java kopiruje .NET
Sickboy 10. 11. 2003 09:41
Nový
 
 
│
 
└ 
Re: Java kopiruje .NET
agent 15. 11. 2003 00:01
Nový
 
 
└ 
Re: Java kopiruje .NET
Quaak 9. 11. 2003 08:00
Nový
 
 
 
└ 
Re: Java kopiruje .NET
lzap 9. 11. 2003 20:55
Nový
FLAME
lzap 9. 11. 2003 11:43
Nový
operatory, implicitni konstruktory, ...
wessan 9. 11. 2003 12:11
Nový
├ 
Re: operatory, implicitni konstruktory, ...
sss 9. 11. 2003 12:41
Nový
├ 
Re: operatory, implicitni konstruktory, ...
palko 10. 11. 2003 09:36
Nový
│
└ 
Re: operatory, implicitni konstruktory, ...
lzap 10. 11. 2003 12:31
Nový
│
 
├ 
Re: operatory, implicitni konstruktory, ...
ondrej 10. 11. 2003 19:27
Nový
│
 
│
└ 
Re: operatory, implicitni konstruktory, ...
lzap 11. 11. 2003 09:35
Nový
│
 
└ 
Re: operatory, implicitni konstruktory, ...
binary__runner 12. 11. 2003 10:28
Nový
├ 
Re: operatory, implicitni konstruktory, ...
Sat 10. 11. 2003 12:06
Nový
│
└ 
Re: operatory, implicitni konstruktory, ...
lzap 10. 11. 2003 12:39
Nový
│
 
├ 
Re: operatory, implicitni konstruktory, ...
wessan 11. 11. 2003 14:46
Nový
│
 
│
└ 
Re: operatory, implicitni konstruktory, ...
lzap 11. 11. 2003 23:54
Nový
│
 
│
 
└ 
Re: operatory, implicitni konstruktory, ...
agent 15. 11. 2003 00:13
Nový
│
 
└ 
Další
agent 15. 11. 2003 00:06
Nový
│
 
 
└ 
Re: Další
lzap 15. 11. 2003 13:43
Nový
│
 
 
 
└ 
Re: Další
agent 15. 11. 2003 22:15
Nový
└ 
Re: operatory, implicitni konstruktory, ...
anonymní uživatel 11. 11. 2003 20:31
Nový
ABAP na vas rozmazlenci!!!!
seth 11. 11. 2003 17:07
Nový
Metadata
Pavel Kolesnikov 20. 12. 2003 12:37
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem