Fix: incompatible types: Object cannot be converted to Integer


The main reason we have Generics is Java is for Type Safety. As a result of type safety, we do not need to type-cast collection objects that are using using generic types.

Now look at the below code carefully,

1 package org.code2care.generics;
2 
3 import java.util.ArrayList;
4
5 public class GenericExample {
6
7    public static void main(String[] args) {
8
9         ArrayList<Object> objectList = new ArrayList<>();
10        objectList.add(10);
11        objectList.add(10.20);
12        objectList.add("Sam");
13
14        Integer s = objectList.get(0);
15        
16
17    }
18 }

At line number 9 we are creating an ArrayList of generic type Object. In the subsequent lines we are adding data to the list of type Integer, Double and String, there is no issue there.


But at line 14, when we try to get the element from the ArrayList we get a compliation error: "incompatible types: java.lang.Object cannot be converted to java.lang.Integer"


Why! This is like catch-22, you are using generics to avoid ClassCastExceptions during runtime and yet you are trying to hold objects of Object type that can cause a runtime exception. The compiler will not let you do this as it is designed to be type-safe.


Example: ArrayList<Object> and ArrayList<Integer> are two distinct types, even though Integer is a subtype of Object.

-




Have Questions? Post them here!