To handle the transition to generics, Java allows a generic class to be used without any
type arguments. This creates a raw type for the class.
// Demonstrate a raw type.
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getob() {
return ob;
}
}
public class MainClass {
public static void main(String args[]) {
Gen<Integer> iOb = new Gen<Integer>(88);
Gen<String> strOb = new Gen<String>("Generics Test");
Gen raw = new Gen(new Double(98.6));
// Cast here is necessary because type is unknown.
double d = (Double) raw.getob();
System.out.println("value: " + d);
strOb = raw; // OK, but potentially wrong
String str = strOb.getob();
// This assignment also overrides type safety.
raw = iOb; // OK, but potentially wrong
d = (Double) raw.getob();
}
}
Exception in thread "main" value: 98.6
java.lang.ClassCastException: java.lang.Double
at MainClass.main(MainClass.java:26)