import java.util.*;
public class G {
public static void main( String[] args) {
try {
List<Integer> lstInt = new ArrayList<Integer>();
List<String> lstStr = new ArrayList<String>();
Class clsLstInt = lstInt.getClass();
Class clsLstStr = lstStr.getClass();
//--- neue Instanz der Klasse von lstInt bilden -> da das Objekt lstInt
//--- vom Typ ArrayList<Integer> ist, müssten wir also gefahrlos casten
//--- können
List<Integer> lstInt2 = (List<Integer>)(clsLstInt.newInstance());
lstInt2.add( new Integer( 1));
//--- jetzt kommt eine neue Instanz der Klasse von lstStr -> da lstStr
//--- vom Typ ArrayList<String> ist, müsste der Cast auf List<Integer>
//--- doch eigentlich schiefgehen, wenn das Class-Objekt wirklich relevante
//--- Information über den generischen Type enthalten würde. Das klappt
//--- aber ganz problemlos; obwohl die Liste als Instanz der Klasse ArrayList<String>
//--- erzeugt wurde, lässt sie sich als List<Integer> verwenden
List<Integer> lstInt3 = (List<Integer>)(clsLstStr.newInstance());
lstInt3.add( new Integer( 1));
System.out.println( "lstInt.class: " + clsLstInt.getName());
System.out.println( "lstStr.class: " + clsLstStr.getName());
System.out.println( "equal( clsLstStr, clsLstInt):" + clsLstStr.equals( clsLstInt));
System.out.println( "identical( clsLstStr, clsLstInt):" + clsLstStr == clsLstInt);
} catch ( Exception e) {
e.printStackTrace();
}
}
}