Angenommen, ich habe vier Klassen: Car
, Convertible
, PickupTruck
und CarManufacturer
.Java Generics Call Constructor
Car
ist die abstrakte Klasse, die Convertible
und PickupTruck
vererben:
public abstract class Car {
private String name;
private String colour;
//Constructor
}
Convertible
und PickupTruck
beide parameterlos Konstrukteure haben:
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
speichert eine Liste der entweder Convertibles
oder PickupTrucks
.
public class CarManufacturer <T extends Car>{
private List<T> carsProduced = new LinkedList<>();
}
Wie kann ich eine Funktion implementieren produceCar()
, die den parameterlosen Konstruktor aufruft und fügt das Objekt in der Liste? Ich habe versucht:
public void produceCar(){
this.carsProduced.add(new T());
}
den Fehler zurückkehrend: Type parameter 'T' cannot be instantiated directly
Nun gibt es bessere Möglichkeiten als Reflexionen verwenden, aber immer noch eine gültige Antwort. – Flown