2017-05-05 36 views
1

我有一个包装类,它包含一个list<Car>和一些返回一个Car对象的方法。使用泛型(?),对象或分隔类是“更好”吗?

我需要另一个类将包含list<Bike>和相同的方法具有相同的实现,但当然不同种类的返回类型(Bike)。

我在想,也许是为了避免重复代码和避免一个类,我可以使用list<?>list<Object>,但然后我需要做一些转换时返回对象。

您认为哪一个更有效率?

+0

我想,你正试图重新发明轮子。 –

+0

为什么不让这个类具有通用性?或者使用通用基类。 –

+4

有一个'Vehicle'类,'VehicleList '并且让'Car'和'Bike'' extends Vehicle'。那么你可以使用'VehicleList 自行车'和'VehicleList 汽车;' – QBrute

回答

2

扩展我的评论,你可以有以下的结构,以充分利用泛型。

一个抽象父类

abstract class Vehicle { 
    ... 
} 

一个通用的,有界列表容器类

class VehicleList<T extends Vehicle> { 
    private final List<T> vehicles; // Or any other way you want to hold your data 
    ... 
} 

而具体的类从Vehicle

class Car extends Vehicle { 
    ... 
} 

class Bike extends Vehicle { 
    ... 
} 

继承之后,无论你想有一个清单Vehicle s,您可以像使用它一样如下:

VehicleList<Car> cars = ...; 
VehicleList<Bike> bikes = ...; 
+0

我同意了,但是我们可以不用抽象类来接口..所以子类可以选择扩展任何其他类 –

+1

可能他没有建议接口,因为方法的实现对每个“孩子”类都完全相同。 – JohnLocke

0

为了提高效率,这并不重要。你不会注意到一个单独的演员,这是一个非常快速的操作,并且泛型已经经常在引擎盖下演员。

然而,对于这种情况

我有一个类(它还挺包装的)含有一种list<Car>和一些方法,返回一个Car对象。

现在我应该创建另一个类,其中包含list<Bike>和相同的实现方法,但当然还有不同种类的返回类型(Bike)。

它更合理不使用List<?>List<Object>而是为了让自己的类通用的,可能是有界的。

0

这不是性能问题。我认为这是关于可读性,清晰度和理解。

您的Car,Bike等等,如果它们都扩展了一个通用的基类或接口(例如Vehicle),则效果最佳。

你的类应该是这样的,如果你使用泛型用碱车辆接口:

public class VehicleRepo<T extends Vehicle> { 
    private List<T> vehicles; 
    private T vehicle; 

    T getVehicle() { return this.vehicle; } 
} 
相关问题