Java Generics Call Constructor

Viewed 3434

Let's assume I have four classes: Car, Convertible, PickupTruck and CarManufacturer.

Car is the abstract class that Convertible and PickupTruck inherit from:

public abstract class Car {
    private String name;
    private String colour;

    //Constructor
}

Convertible and PickupTruck both have parameterless constructors:

public class Convertible extends Car {
    private boolean roofUnfolded;

    public Convertible() {
        super("Convertible", "Red");
        this.roofUnfolded = false;
    }
}

public class PickupTruck extends Car {
    private double capacity;

    public PickupTruck() {
        super("Pickup Truck", "Black");
        this.capacity = 100;
    }
}

CarManufacturer stores a List of either Convertibles or PickupTrucks.

public class CarManufacturer <T extends Car>{
    private List<T> carsProduced = new LinkedList<>();
}

How can I implement a function produceCar() that calls the parameterless constructor and adds the object to the list? I tried:

public void produceCar(){
    this.carsProduced.add(new T());
}

Returning the error: Type parameter 'T' cannot be instantiated directly

2 Answers
Related