java/ch/wlkl/javaExamples/E.java

package ch.wlkl.javaExamples;

import static ch.wlkl.javaExamples.Util.*;
import java.util.ArrayList;

public  class E<R, W> {
    ArrayList<R> in = new ArrayList<R>();
    ArrayList<W> out = new ArrayList<W>();
    public E(R... args) {
        for (int i = 0; i< args.length; i++)
            in.add(args[i]);
    }
    public R read() {
        return in.remove(0);
    }    
    public void write(W arg) {        
    }
    
    public void testTyp() {
        say("E testTyp");
        Integer ii = 5;
        Float ff = 1.1f;
        Number nn = null;
        nn = ff;
        say("Number " + nn);
        ii = (Integer) nn;
        say("Integer " + ii);
        Integer i = ii;        
        say("Integer " + i);
    }

    public void testArr() {
        say("E testArr");
        Integer ii [] = {5, 9};
        Float ff [] = {1.1f, 2.2f};
        Number nn [] = null;
        nn = ff;
        say("Number " + nn[0]);
        // say("cast " + ((Integer []) nn)[0]);
        ii = (Integer []) nn;
        say("Integer " + ii[0]);
        Integer i [] = ii;        
        say("Integer " + i[2]);
    }

    public void testCol() {
        say("E testColl");
        ArrayList<Integer> ii = new ArrayList<Integer>();
        ii.add(1);
        ArrayList<Float> ff = new ArrayList<Float> ();
        ff.add(2.2f);
        ArrayList<? extends Number> nn = null;
        nn =  ff;
        say("Number " + nn.get(0));
        say("cast " + ((ArrayList<Integer>) nn).get(0));
        ii = (ArrayList<Integer>) nn;
        say("Integer " + ii.get(0));
        Integer i = ii.get(0);        
        say("Integer " + i);
    }

    public void testGen() {
        say("E testGen");
        E<Integer, Integer> ii = new E<Integer, Integer> (1, 2, 3);
        E<Float, Float> ff = new E<Float, Float> (1.1f, 2.2f, 3.3f);
        E<? extends Number, ? extends Number> nn = null;
        nn = (E<? extends Number, ? extends Number>) ff;
        say("read Number " + nn.read());
        ii = (E<Integer, Integer>) nn;
        say(ii.getClass().getTypeParameters().toString());
        say(ii.getClass().getTypeParameters()[0].toString());
        say(ii.getClass().getTypeParameters()[0].getGenericDeclaration().getTypeParameters(). toString());
        say("read Integer " + ii.read());;
        Integer i = ii.read();        
    }

    public static void main(String... args) {
        E<Object, Object> e = new E<Object, Object>(); 
        e.testGen();
        e.testCol();
        e.testArr();
        e.testTyp();
    }
    
}