- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下问题:
假设我们有 3 个类:
Vehicle
的抽象类Motorcycle
的类延伸Vehicle
Car
的类延伸Vehicle
这意味着Vehicle
物体可以同时容纳Motorcycle
和Car
对象。
我还有一个名为 VehicleDatabase
的类(class)它基本上“模拟”一个数据库(我希望我可以使用数据库,但这是一个大学项目)并拥有 ArrayList<Vehicle>
名为 db
的字段以及一些提供一些基本操作的方法,以便我可以与数据库交互(CRUD 操作和其他一些操作)。
我想要实现的一个方法是showVehicles()
。为了简化并解决我的问题,我们假设此方法必须简单地将 .toString()
打印到控制台。函数参数指定的所有对象的 。
示例:
用户中显示菜单:
Select which type of vehicles you want to be shown:
1.Motorcycles
2.Cars
Make your choice:
之后我们的函数showVehicles
必须采用一个参数,例如 showVehicles(CarSomething)
并打印 db
上存储的所有汽车数组列表。我实在找不到更优雅的方式来实现该功能。以下是我当前的实现:
public void showVehicles(Class<?> cls)
{
for(Vehicle v : db)
{
if(v.getClass().equals(cls))
System.out.println(v.toString());
}
}
并像这样调用它: showVehicles(Car.class)
或showVehicles(Motorcycle.class)
.
有更好的方法吗?请提出您的建议。我只是觉得我没有使用应有的多态性。
最佳答案
这是一种可能性。
我创建了一个Map<Class<?>, List<Vehicle>>
持有库存。
map 是根据车辆列表创建的,但也可以通过简单地直接添加到 map 来创建。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
abstract class Vehicle {
}
class MotorCycle extends Vehicle {
String name;
MotorCycle(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
class Car extends Vehicle {
String name;
Car(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
public class CarMapper {
public static void main(String[] args) {
List<Vehicle> list = new ArrayList<>();
list.add(new MotorCycle("Honda"));
list.add(new MotorCycle("Harley-Davidson"));
list.add(new Car("Ford"));
list.add(new Car("Chrysler"));
Map<Class<?>, List<Vehicle>> inventory = list.stream().collect(
Collectors.groupingBy(Object::getClass));
}
}
这是否是一个合理的方法取决于您(以及其他发表评论的人)。您可能仍然需要 map 才能从用户菜单中获取正确的类别。
Map<String, Class<?>> menuMap = new HashMap<>();
menuMap.put("Car", Car.class);
menuMap.put("MotorCycle", MotorCycle.class);
Class<?> lookup = menuMap.get("Car");
for (Vehicle v : inventory.get(lookup)) {
System.out.println(v.toString());
}
关于java - 充分利用 Java 中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59461160/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!