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.

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright © Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap