Difference between revisions of "Generics"

From Suhrid.net Wiki
Jump to navigationJump to search
Line 20: Line 20:
  
 
'''Polymorphism only applies to the base type i.e list can be declared as arraylist'''
 
'''Polymorphism only applies to the base type i.e list can be declared as arraylist'''
You '''CANNOT''' say List<Object> obj = new ArrayList<String>();
+
You '''CANNOT''' do this:
 +
<syntaxhighlight lang="java5">
 +
List<Object> obj = new ArrayList<String>();
 +
</syntaxhighlight>
  
 
[[Category:OCPJP]]
 
[[Category:OCPJP]]

Revision as of 02:55, 31 May 2011

  • Generics is a way to enforce ONLY compile-time type safety.
  • All the type information is not present at run-time. The compiler strips out type information from the bytecode using a process called type erasure.
  • WHY Type erasure ? To ensure backward compatibility with legacy code.
  • This compile-time safety is broken when generic and non-generic legacy code are mixed up.
  • Watch out when autoboxing is involved with legacy code.
List l = new ArrayList();
l.add(123); //Auto-boxing happens.
int i = l.get(0); //Compile-time error. Autounboxing cant work because get() returns Object and not Integer.


Polymorphism and Generics

List<String> list = new ArrayList<String>();

Polymorphism only applies to the base type i.e list can be declared as arraylist You CANNOT do this:

 List<Object> obj = new ArrayList<String>();