Sopimuspohjainen olio-ohjelmointi
Sopimuspohjainen olio-ohjelmointi 2008-04-09 2008-04-09
(c) 2006-2008 Jouni Smed
(c) 2006-2008 Jouni Smed 1 1
7. Geneerisyys 7. Geneerisyys
1.
1. Geneerisyys Javassa Geneerisyys Javassa 2.
2. Esimerkki: Esimerkki: Joukko<T> Joukko<T>
3.
3. Geneerisyys vai periytyminen Geneerisyys vai periytyminen
Geneerinen luokka: määrittely Geneerinen luokka: määrittely
public class
public class PariPari<S,T><S,T>
{ {
privateprivate S eka; S eka;
privateprivate T toka; T toka;
publicpublic PariPari(S e1, T e2)(S e1, T e2) {
{ eka = e1;
eka = e1;
toka = e2;
toka = e2;
} }
publicpublic S annaEka() { S annaEka() { returnreturn eka; } eka; } publicpublic T annaToka() { T annaToka() { returnreturn toka; } toka; }
public void public void asetaEka(S e) { eka = e; }asetaEka(S e) { eka = e; }
public voidpublic void asetaToka(T e) { toka = e; } asetaToka(T e) { toka = e; } }
}
Geneerinen luokka: käyttö Geneerinen luokka: käyttö
Pari
Pari< <Integer Integer, , Integer Integer> p1 = > p1 = new
new
Pari Pari< <Integer Integer, , Integer Integer>(1, 2); >(1, 2);
Pari
Pari< <String String, , Double Double> p2 = > p2 = new
new
Pari Pari< <String String, , Double Double>( >("foo"
"foo", 43.234);, 43.234);
Pari
Pari< <Double Double, , Pari Pari< <String String, , String String>> p3 = >> p3 = new
new
Pari Pari< <Double Double, , Pari Pari< <String String, , String String>>(19.1, >>(19.1,
newnew Pari Pari< <String String, , String String>( >("
"abab"", " ,
"baba""));));
Tyyppiparametrin rajaus Tyyppiparametrin rajaus
public class
public class TasopisteTasopiste<N <N extendsextends NumberNumber> {> {
privateprivate N x, y; N x, y;
public public TasopisteTasopiste(N n1, N n2) { x = n1; y = n2; }(N n1, N n2) { x = n1; y = n2; }
publicpublic N annaX() { N annaX() { returnreturn x; } x; }
publicpublic N annaY() { N annaY() { returnreturn y; } y; } public void public void asetaX(N n) { x = n; }asetaX(N n) { x = n; } public void public void asetaY(N n) { y = n; } asetaY(N n) { y = n; } }
} Tasopiste
Tasopiste<<DoubleDouble> p1 = > p1 = newnew Tasopiste<Tasopiste<DoubleDouble>(1.0, 1.3);>(1.0, 1.3);
Tasopiste
Tasopiste<<IntegerInteger> p2 = > p2 = newnew TasopisteTasopiste<<Integer>(3, -5);Integer>(3, -5);
Huomioitavaa Huomioitavaa
Vapaa tyyppi: Vapaa tyyppi: ? ?
String String tulosta( tulosta(List List<?> lista) <?> lista)
String String tulosta( tulosta(List List< <? ? extends extends Henkilö
Henkilö>) >)
Rajoittaminen ylhäältä: Rajoittaminen ylhäältä: super super
class class Työntekijä Työntekijä implements implements Comparable
Comparable<? <? super super Työntekijä Työntekijä> >
Raakatyyppi Raakatyyppi
List List ≈ ≈ List List< <Object Object> >
Geneeriset luokkametodit:
Geneeriset luokkametodit:
Collections.replaceAll() Collections.replaceAll()
public static
public static <T> <T> booleanboolean replaceAll( replaceAll(ListList<T> list,<T> list, T oldVal, T newVal) T oldVal, T newVal) List
List<<IntegerInteger> lista1;> lista1;
ListList<<StringString> lista2;> lista2;
List
List<<DoubleDouble> lista3;> lista3;
/* ... */
/* ... */
Collections
Collections.<.<IntegerInteger>replaceAll(lista1, 3, 5);>replaceAll(lista1, 3, 5);
Collections
Collections.<.<StringString>replaceAll(lista2, >replaceAll(lista2, "foo""foo", , "moo""moo"););
Collections
Collections.<.<DoubleDouble>replaceAll(lista3, 42.12, -34.34);>replaceAll(lista3, 42.12, -34.34);
Sopimuspohjainen olio-ohjelmointi
Sopimuspohjainen olio-ohjelmointi 2008-04-09 2008-04-09
(c) 2006-2008 Jouni Smed
(c) 2006-2008 Jouni Smed 2 2
8. Kokoelmat ja niiden käyttö 8. Kokoelmat ja niiden käyttö
1.
1. Taulukot Taulukot 2.
2. Kokoelmaluokat Kokoelmaluokat 3.
3. Iteraattorit Iteraattorit
Koko kokoelmahierarkia Koko kokoelmahierarkia
Kokoelmahierarkia:
Kokoelmahierarkia:
tärkeimmät rajapinnat ja luokat tärkeimmät rajapinnat ja luokat
Iterator
Iterator CollectionCollection MapMap
ListIterator
ListIterator ListList SetSet QueueQueue HashMapHashMap TreeMapTreeMap
ArrayList
ArrayList LinkedListLinkedList HashSetHashSet TreeSetTreeSet PriorityQueuePriorityQueue