Is there any difference between LinkedList< ? > and LinkedList< Object > in Java?  
            Asked
            
        
        
            Active
            
        
            Viewed 274 times
        
    1 Answers
1
            This passes compilation:
LinkedList<?> list1 = new LinkedList<String> ();
This doesn't:
LinkedList<Object> list2 = new LinkedList<String> ();
i.e. a LinkedList<?> variable can be assigned any LinkedList<SomeType>. A LinkedList<Object> variable can only be assigned a LinkedList<Object> (or a raw LinkedList, which is not advised to use).
On the other hand the following add:
LinkedList<?> list1 = new LinkedList<String> ();
list1.add("x");
doesn't pass compilation, while the following does:
LinkedList<Object> list2 = new LinkedList<Object> ();
list2.add("x");
 
    
    
        Eran
        
- 387,369
- 54
- 702
- 768
- 
                    Why cannot i add any string in list1? – karan Jun 06 '17 at 09:24
- 
                    I think that main point here is that generics are _invariant_. It was done in order to save generics type safety, otherwise the following code might throw class cast exception: `Listli = new ArrayList – Alex Jun 06 '17 at 09:26(); List ln = li; // illegal ln.add(new Float(3.1415));` So `?` was created for such purposes. 
- 
                    2@karan Because `list1` may be assigned any generic LinkedList (`LinkedList`, `LinkedList – Eran Jun 06 '17 at 09:29`, etc...), so the compiler doesn't know which elements can be added to it safely. 
- 
                    @Eran thanks, it was helpful – karan Jun 06 '17 at 09:36
