我有一个包含list<Car>
的包装类和一些返回Car
对象的方法。
我需要另一个包含list<Bike>
的类和具有相同实现的相同方法,但当然还有不同类型的返回类型(Bike
)。
我在想,为了避免重复代码并避免使用一个类,我可以使用list<?>
或list<Object>
,但是在返回对象时我需要做一些演员。
您认为哪一个更有效率?
答案 0 :(得分: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
的列表,都可以使用它,如下所示:
VehicleList<Car> cars = ...;
VehicleList<Bike> bikes = ...;
答案 1 :(得分:1)
您也可以在类上使用泛型。
所以你可以将你的课程设置为
public class MyClass<T> {
private T t;
.....
这样你就可以编写泛型方法
请参阅https://docs.oracle.com/javase/tutorial/java/generics/types.html
答案 2 :(得分:0)
为了提高效率,这并不重要。你不会注意到一个单独的演员,这是一个非常快速的操作,而且泛型已经经常在幕后演员。
然而,对于这种情况
我有一个类(它是一个包装器的类),它包含一个
list<Car>
和一些返回Car
对象的方法。现在我应该创建另一个包含
list<Bike>
的类和具有相同实现的相同方法,但当然还有不同类型的返回类型(Bike
)。
更合理的是不使用List<?>
或 List<Object>
,而是使自己的类具有通用性,可能是有限的。
答案 3 :(得分:0)
这不是性能问题。我认为这是关于可读性,清晰度和理解的。
如果Car
,Bike
等等都扩展了公共基类或接口(例如Vehicle
),则效果最佳。
如果您使用带有基本Vehicle界面的泛型,那么您的类看起来像这样:
public class VehicleRepo<T extends Vehicle> {
private List<T> vehicles;
private T vehicle;
T getVehicle() { return this.vehicle; }
}