gpt4 book ai didi

java - YAJGCQ 另一个 Java 泛型与集合 Q

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:21 26 4
gpt4 key购买 nike

我的 C++ 扎实,有些 Java 概念并不是 100% 清楚。

List<SomeInterface> list = new ArrayList<SomeImplementation>; 

这是 100% 清楚的,无需解释 - 但它会产生后果......

interface Drivable {...}
class Car implements Drivable {...}
class Bike implements Drivable {...}
class Skateboard implements Drivable {...}

class MyGarage{
List<Driveable> myRides;

public void addRides( List<Driveable> rideList ){...}

不能用 List<Car> 调用.但是我可以通过以下方式将 Cars 添加到 myRides:

public void addCars( List<Car> carList ){
myRides.addAll( new List<Driveable>( carList ) );

Q1:这是个好主意吗?

我真的希望像第一个函数那样起作用。通过做一些对应于 C++ const& 的事情并将传入的 carList 的副本添加到 myRides 我认为 carList 将受到保护,免受非法访问。我希望添加 final作为函数参数被压碎了。

问题 2:有什么方法可以使 addRides(List<Driveable> rideList) 完全可调用?工作?

重载 ( List<Car> List<Bike> etc ) 也不合法。

是的,我可以通过添加单独的函数来完成这项工作 addBikes() addCars etc或者我可以做 new List<Drivable>在每个调用点。但我希望有更时尚的东西。

Q3:有什么建议吗?

非常感谢!亚当

最佳答案

您的addRides 方法应该是这样的:

public void addRides(Collection<? extends Drivable> c)

如果对泛型的使用有疑问,可以在java.util中寻找集合接口(interface),他们有很多例子,你想做的和 Collection.addAll()是一样的。 确实如此。

关于java - YAJGCQ 另一个 Java 泛型与集合 Q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com