ในภาษาจาวาตั้งแต่ก่อนเวอร์ชั่น 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 จะสะดวกสบายกว่า