Java 如何在运行时捕获方法类型(generick类型)

Java 如何在运行时捕获方法类型(generick类型),java,generics,Java,Generics,我必须在运行时捕捉类型。我不知道该怎么做 棘手的地方是这种类型是泛型的 代码段: 但接下来是产出: Passengers type is: At the sheep are presented: 1 Christofor Columb 2 Fernando Magelan 3 James Kuk 这一行: victoria.getPassengerType 它应该返回类类型,不返回任何内容 有什么建议吗?由于类型擦除,在运行时类型信息消失了。这里的常见技巧是在构造函数中存储T类,如下所示: p

我必须在运行时捕捉类型。我不知道该怎么做

棘手的地方是这种类型是泛型的

代码段:

但接下来是产出:

Passengers type is:
At the sheep are presented:
1 Christofor Columb
2 Fernando Magelan
3 James Kuk
这一行:

victoria.getPassengerType

它应该返回类类型,不返回任何内容


有什么建议吗?

由于类型擦除,在运行时类型信息消失了。这里的常见技巧是在构造函数中存储T类,如下所示:

public class Ship<T> {

    private final Class<T> passengerType;
    private ArrayList<T> passengers = new ArrayList<T>();

    public Sheep(ArrayList<T> passengers, Class<T> passengerType) {
        this.passengers = passengers;
        this.passengerType = passengerType;
    }

    public void addPassenger(T object) {
        passengers.add(object);
    }
    // ... rest of class
}

由于类型擦除,在运行时类型信息消失。这里的常见技巧是在构造函数中存储T类,如下所示:

public class Ship<T> {

    private final Class<T> passengerType;
    private ArrayList<T> passengers = new ArrayList<T>();

    public Sheep(ArrayList<T> passengers, Class<T> passengerType) {
        this.passengers = passengers;
        this.passengerType = passengerType;
    }

    public void addPassenger(T object) {
        passengers.add(object);
    }
    // ... rest of class
}

为什么需要知道类型?object.getClass可以这样做,但它不一定返回代码本身中定义的类型,在编译类型时会被删除。无论如何,您可能有一个设计缺陷。尝试避免特定类型检查以确定流。为什么需要知道类型?object.getClass可以这样做,但它不一定返回代码本身中定义的类型,该类型在编译类型时会被删除。无论如何,您可能有一个设计缺陷。尝试避免特定类型的检查以确定您的流;当getPassengerType调用它时不返回任何内容?@nazar_art这可能意味着您在构造函数的头中输入了错误的passengerType,因此This.passengerType=passengerType是字段本身的赋值。在构造函数末尾设置断点,并检查是否已分配this.passengerType;当getPassengerType调用它时不返回任何内容?@nazar_art这可能意味着您在构造函数的头中输入了错误的passengerType,因此This.passengerType=passengerType是字段本身的赋值。在构造函数末尾设置断点,并检查是否已分配this.passengerType。
public class Ship<T> {

    private final Class<T> passengerType;
    private ArrayList<T> passengers = new ArrayList<T>();

    public Sheep(ArrayList<T> passengers, Class<T> passengerType) {
        this.passengers = passengers;
        this.passengerType = passengerType;
    }

    public void addPassenger(T object) {
        passengers.add(object);
    }
    // ... rest of class
}