Ešte sa opravím: tvrdenie (T) 0
je blbosť, až tak ďaleko autoboxing nesiaha :-) Keďže vieme, že 0 je literál typu int, explicitne vyrobíme z toho Integer a ten pretypujeme na T. Keďže T extends Number a Integer extends Number, pretypovanie je korektné. Kompilátor vyhodí warning ,,Unchecked cast from Integer to T", ale vieme, že to nie je problém. Výsledná beživá trieda:
public class Vector2D<T extends Number> {
private T x;
private T y;
private Class<T> elementType;
public Vector2D(Class<T> elementType) {
this.x = (T) Integer.valueOf(0);
this.y = (T) Integer.valueOf(0);;
this.elementType = elementType;
}
public String getType() {
return elementType.getName();
}
public Class<T> getElementType() {
return elementType;
}
public T getX() {
return x;
}
public T getY() {
return y;
}
public static void main(String[] args) {
Vector2D<Float> floatVector = new Vector2D<Float>(Float.class);
System.out.println(String.format("[%s, %s] of %s]", floatVector.getX(), floatVector.getY(), floatVector.getElementType()));
}
}