If I have an abstract class like this:
public abstract class Item
{
private Integer value;
public Item()
{
value=new Integer(0);
}
There is no way to use the Java type system to enforce that a class hierarchy has a uniform signature for the constructors of its subclasses.
Consider:
public class ColorPencil extends Pencil
{
private Color color;
public ColorPencil(Color color)
{
super();
this.color=color;
}
}
This makes ColorPencil a valid T (it extends Item). However, there is no no-arg constructor for this type. Hence, T() is nonsensical.
To do what you want, you need to use reflection. You can't benefit from compile-time error checking.