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();
}
}