2017-05-05 34 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; } 
} 
相關問題