Prisel za mnou kolega, ze mu nefunguje Hashtable.
A opravdu, nefungovala. Mel dva klice se stejnym
obsahem, a presto je Hashtable povazovala za ruzne.
Kdyz jsem zavolal equals(), byly shodne.
Kdyz jsem je dal do tabulky, byly ruzne.
Uz jsem myslel, ze z toho zesedivim. Nakonec
jsem to objevil. Kdo mate radi kvizove otazky,
tady je cista destilace toho problemu:
public class Problem<T> {
public boolean equal(T a, T b) {
return a.equals(b);
}
static class Item {
String s;
public Item(String s) {this.s = s; }
public boolean equals(Item i) {
return s.equals(i.s);
}
}
public static void main(String[] args) {
Problem<Item> pi = new Problem<Item>();
Item i1 = new Item("A");
Item i2 = new Item("A");
System.out.println("i1.equals(i2) ... " + i1.equals(i2));
System.out.println("pi.equal(i1,i2) ... " + pi.equal(i1, i2));
}
}
Vystup:
i1.equals(i2) ... true
pi.equal(i1,i2) ... false
Kvizova otazka zni: "Jak je mozny, ze ve druhem pripade to dava false?".
Odpovedi posilejte na znamou adresu tri jednicky padesat :-)
Uz jsem si rikal, ze by se mohla definice jazyka zmenit,
aby k tomuhle nemohlo dochazet.
Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno Martin Kuba
Institute of Computer Science email: [EMAIL PROTECTED]
Masaryk University http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
--------------------------------------------------------------