【发布时间】:2021-12-13 01:55:11
【问题描述】:
我正在尝试创建一个返回泛型类型参数的方法。
我有一个扩展抽象类 Order 的 VehicleOrder 类。 在 Order 类中,我创建了一个抽象方法 receiveHiredObject。这个方法不会接收任何参数,会返回一个泛型。
public abstract class Order implements Orderable {
private Date date;
private Customer customer;
public abstract <T> T receiveHiredObject();
我在类 VehicleOrder 中实现了这个方法,并设置它返回类参数车辆。
public class VehicleOrder extends Order {
private Vehicle vehicle;
public VehicleOrder(final Date date, final Customer customer, final Vehicle vehicle) {
super(date, customer);
this.vehicle = vehicle;
}
@SuppressWarnings("unchecked")
@Override
public Vehicle receiveHiredObject() {
return vehicle;
}
问题是,当我实例化一个 Order 类型的新 VehilceOrder 并且使用方法 receiveHiredObject 时,此方法返回给我一个 Object,而我只有 toString 方法可用。
Order a = new VehicleOrder();
a.receiveHiredObject();
我希望将来对其他类型的对象(例如 HotelOrder)使用相同的方法。
我做错了什么,为什么方法 receiveHiredObject 返回的是 Object 而不是 VehicleOrder?如何改进返回正确类型的方法?
谢谢,
【问题讨论】:
-
你能让
Order类通用,并有VehicleOrder extends Order<Vehicle>吗?