public class CarService implements ICarService {
private final Map<String, Car> carMap = new HashMap<String, Car>();
@Override
public List<Car> findAll() {
final ArrayList<Car> al = new ArrayList<Car>();
for (final Map.Entry<String, Car> entry : carMap.entrySet()) {
al.add((Car) entry);
}
return al;
}
}
我有一个类名CarService,它将从carMap获取所有信息并存储到List中。但是我收到错误表明“java.util.HashMap $ Entry无法转换为Car”
final CarService carSvc = new CarService();
List<Car> getAllCar = new ArrayList<>();
getAllCar = carSvc.findAll();
System.out.println(getAllCar.size());
这是我调用汽车服务的主要功能
答案 0 :(得分:3)
问题出在你的for
循环中。
for (final Map.Entry<String, Car> entry : carMap.entrySet()) {
al.add((Car) entry);
}
在此,您将entry
声明为Map.Entry<String, Car>
。您无法以任何方式将其强制转换为Car
。您需要获取Map.Entry
的值并将其添加到a1
。
您可以使用getValue()
method执行此操作。如,
for(final Map.Entry<String, Car> entry : carMap.entrySet()) {
a1.add(entry.getValue());
}
由于你的类型参数,最后根本不需要进行投射。
答案 1 :(得分:2)
正如所指出的那样,原始代码导致运行时错误,因为Map.Entry对象不是Car(因此转换无效)。
话虽如此,由于不需要密钥,因此可以使用Map#values,
for (final Car car : carMap.values()) {
al.add(car);
}
或者,“没有循环马!”
List<Car> cars = new ArrayList<Car>(carMap.values());
答案 2 :(得分:2)
为什么不简单呢?:
List<Car> cars = new ArrayList<>(carMap.values());
HashMap#values()
返回Collection<T>
,然后您可以直接提供给ArrayList构造函数。