ในภาษาจาวาตั้งแต่ก่อนเวอร์ชั่น 5 ซึ่งยังไม่รองรับการเขียนโปรแกรมแบบ genereic เราสามารถเขียนคลาสที่สามารถทำงานกับข้อมูลชนิดใดก็ได้โดยการกำหนดฟิลด์ด้วยชนิดของข้อมูลแบบ Object ตัวอย่างเช่น
class NonGenericClass {
private Object val;
public NonGenericClass(Object val) {
this.val = val;
}
public Object get() {
return val;
}
}
เมื่อเราสร้างออบเจกต์ขึ้นมา เราสามารถกำหนดชนิดของข้อมูลเป็นอะไรก็ได้ที่เป็นข้อมูลชนิด reference type จากตัวอย่างด้านล่าง เป็นการใช้กับชนิดของข้อมูล String เพราะข้อมูลที่เรากำหนดให้คือ String
NonGenericClass instance2 = new NonGenericClass(“abc”);
แต่ในการนำข้อมูลมาใช้ด้วยเมธอด get() สิ่งที่ส่งกลับมาคือ Object ดังนั้นเราจะต้อง cast ก่อนนำมาใช้งาน
String str = instance2.get(); // Compile-time error: Incompatible types
String str = (String) instance2.get(); // “abc”
ดังนั้นจะเห็นว่าถึงแม้การใช้ Object จะทำให้คลาสของเราสามารถนำมา reuse ใช้กับชนิดของข้อมูลแบบใดก็ได้ แต่ก็ยังมีข้อจำกัดอยู่ ซึ่งการใช้ generic จะสะดวกสบายกว่า