1   /**
2    * Esimerkki dynaamisesta taulukosta Java 1.5:n geneerisyyttä
3    * ja "autoboxingia" käyttäen.
4    * @author Vesa Lappalainen
5    * @version 1.0, 02.03.2002
6    * @version 1.1, 01.03.2005
7    * @param <TYPE> Tyyppi jota talletetaan
8    */
9   
10  public class TaulukkoGen<TYPE> {
11    public static class TaulukkoTaysiException extends Exception {
12      TaulukkoTaysiException(String viesti) { super(viesti); }
13    }
14  
15    private TYPE alkiot[];
16    private int lkm;
17  
18    public TaulukkoGen() {
19      this(10);
20    }
21  
22    public TaulukkoGen(int koko) {
23      alkiot = (TYPE [])new Object[koko];
24    }
25  
26    public void lisaa(TYPE i) throws TaulukkoTaysiException {
27      if ( lkm >= alkiot.length ) throw new TaulukkoTaysiException("Tila loppu");
28      alkiot[lkm++] = i;
29    }
30  
31    public String toString() {
32      StringBuffer s = new StringBuffer("");
33      for (int i=0; i<lkm; i++)
34        s.append(" " + alkiot[i]);
35      return s.toString();
36    }
37  
38    public void set(int i, TYPE luku) throws IndexOutOfBoundsException {
39      if ( ( i < 0 ) || ( lkm <= i ) ) throw new IndexOutOfBoundsException("i = " + i);
40      alkiot[i] = luku;
41    }
42  
43    public TYPE get(int i) throws IndexOutOfBoundsException {
44      if ( ( i < 0 ) || ( lkm <= i ) ) throw new IndexOutOfBoundsException("i = " + i);
45      return alkiot[i];
46    }
47  
48    public static void main(String[] args) {
49      TaulukkoGen<Integer> luvut = new TaulukkoGen();
50      try {
51        luvut.lisaa(0); luvut.lisaa(2);
52        luvut.lisaa(99);  // Tekee oikeasti luvut.lisaa(new Integer(99));
53      } catch ( TaulukkoTaysiException e ) {
54        System.out.println("Virhe: " + e.getMessage());
55      }
56      System.out.println(luvut);
57      luvut.set(1,4);
58      System.out.println(luvut);
59      int luku = luvut.get(2);  // oik: luku = (Integer)(luvut.get(2)).intValue();
60      System.out.println("Paikassa 2 on " + luku);
61      try {
62        luvut.set(21, 4);
63      }
64      catch (IndexOutOfBoundsException e) {
65        System.out.println("Virhe: " + e.getMessage());
66      }
67    }
68  }
69