001 /** 002 * Esimerkki dynaamisesta taulukosta Java 1.5:n geneerisyyttä 003 * ja "autoboxingia" käyttäen. 004 * @author Vesa Lappalainen 005 * @version 1.0, 02.03.2002 006 * @version 1.1, 01.03.2005 007 */ 008 009 public class TaulukkoGen<TYPE> { 010 public static class TaulukkoTaysiException extends Exception { 011 TaulukkoTaysiException(String viesti) { super(viesti); } 012 } 013 014 private Object alkiot[]; 015 private int lkm; 016 017 public TaulukkoGen() { 018 alkiot = new Object[10]; 019 } 020 021 public TaulukkoGen(int koko) { 022 alkiot = new Object[koko]; 023 } 024 025 public void lisaa(TYPE i) throws TaulukkoTaysiException { 026 if ( lkm >= alkiot.length ) throw new TaulukkoTaysiException("Tila loppu"); 027 alkiot[lkm++] = i; 028 } 029 030 public String toString() { 031 StringBuffer s = new StringBuffer(""); 032 for (int i=0; i<lkm; i++) 033 s.append(" " + alkiot[i]); 034 return s.toString(); 035 } 036 037 public void set(int i, TYPE luku) throws IndexOutOfBoundsException { 038 if ( ( i < 0 ) || ( lkm <= i ) ) throw new IndexOutOfBoundsException("i = " + i); 039 alkiot[i] = luku; 040 } 041 042 public TYPE get(int i) throws IndexOutOfBoundsException { 043 if ( ( i < 0 ) || ( lkm <= i ) ) throw new IndexOutOfBoundsException("i = " + i); 044 return (TYPE)alkiot[i]; 045 } 046 047 public static void main(String[] args) { 048 TaulukkoGen<Integer> luvut = new TaulukkoGen<Integer>(); 049 try { 050 luvut.lisaa(0); luvut.lisaa(2); 051 luvut.lisaa(99); // Tekee oikeasti luvut.lisaa(new Integer(99)); 052 } catch ( TaulukkoTaysiException e ) { 053 System.out.println("Virhe: " + e.getMessage()); 054 } 055 System.out.println(luvut); 056 luvut.set(1,4); 057 System.out.println(luvut); 058 int luku = luvut.get(2); // oik: luku = (Integer)(luvut.get(2)).intValue(); 059 System.out.println("Paikassa 2 on " + luku); 060 try { 061 luvut.set(21, 4); 062 } 063 catch (IndexOutOfBoundsException e) { 064 System.out.println("Virhe: " + e.getMessage()); 065 } 066 } 067 }