我有一個包裝類,它包含一個list<Car>
和一些返回一個Car
對象的方法。使用泛型(?),對象或分隔類是「更好」嗎?
我需要另一個類將包含list<Bike>
和相同的方法具有相同的實現,但當然不同種類的返回類型(Bike
)。
我在想,也許是爲了避免重複代碼和避免一個類,我可以使用list<?>
或list<Object>
,但然後我需要做一些轉換時返回對象。
您認爲哪一個更有效率?
我有一個包裝類,它包含一個list<Car>
和一些返回一個Car
對象的方法。使用泛型(?),對象或分隔類是「更好」嗎?
我需要另一個類將包含list<Bike>
和相同的方法具有相同的實現,但當然不同種類的返回類型(Bike
)。
我在想,也許是爲了避免重複代碼和避免一個類,我可以使用list<?>
或list<Object>
,但然後我需要做一些轉換時返回對象。
您認爲哪一個更有效率?
擴展我的評論,你可以有以下的結構,以充分利用泛型。
一個抽象父類
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 = ...;
我同意了,但是我們可以不用抽象類來接口..所以子類可以選擇擴展任何其他類 –
可能他沒有建議接口,因爲方法的實現對每個「孩子」類都完全相同。 – JohnLocke
爲了提高效率,這並不重要。你不會注意到一個單獨的演員,這是一個非常快速的操作,並且泛型已經經常在引擎蓋下演員。
然而,對於這種情況
我有一個類(它還挺包裝的)含有一種
list<Car>
和一些方法,返回一個Car
對象。現在我應該創建另一個類,其中包含
list<Bike>
和相同的實現方法,但當然還有不同種類的返回類型(Bike
)。
它更合理不使用List<?>
或List<Object>
而是爲了讓自己的類通用的,可能是有界的。
您也可以在類上使用泛型。
所以,你可以設置你的類作爲
public class MyClass<T> {
private T t;
.....
這種方式,你可以寫泛型方法
見https://docs.oracle.com/javase/tutorial/java/generics/types.html
這不是性能問題。我認爲這是關於可讀性,清晰度和理解。
您的Car
,Bike
等等,如果它們都擴展了一個通用的基類或接口(例如Vehicle
),則效果最佳。
你的類應該是這樣的,如果你使用泛型用鹼車輛接口:
public class VehicleRepo<T extends Vehicle> {
private List<T> vehicles;
private T vehicle;
T getVehicle() { return this.vehicle; }
}
我想,你正試圖重新發明輪子。 –
爲什麼不讓這個類具有通用性?或者使用通用基類。 –
有一個'Vehicle'類,'VehicleList'並且讓'Car'和'Bike'' extends Vehicle'。那麼你可以使用'VehicleList 自行車'和'VehicleList 汽車;' –
QBrute