Section 4.1. Constructors


4.1. Constructors

In a generic class, type parameters appear in the header that declares the class, but not in the constructor:

 class Pair<T, U> {   private final T first;   private final U second;   public Pair(T first, U second) { this.first=first; this.second=second; }   public T getFirst() { return first; }   public U getSecond() { return second; } } 

The type parameters T and U are declared at the beginning of the class, not in the constructor. However, actual type parameters are passed to the constructor whenever it is invoked:

 Pair<String, Integer> pair = new Pair<String, Integer>("one",2); assert pair.getFirst().equals("one") && pair.getSecond() == 2; 

Look Out for This! A common mistake is to forget the type parameters when invoking the constructor:

 Pair<String, Integer> pair = new Pair("one",2); 

This mistake produces a warning, but not an error. It is taken to be legal, because Pair is treated as a raw type, but conversion from a raw type to the corresponding parameterized type generates an unchecked warning; see Section 5.3, which explains how the -Xlint:unchecked flag can help you spot errors of this kind.




Java Generics and Collections
Java Generics and Collections
ISBN: 0596527756
EAN: 2147483647
Year: 2006
Pages: 136

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net