java - 如何在“instanceof”函数中替换变量
问题描述
我的java项目中有以下类Wheels
,Engine
它们Brake
都实现了CarPart
创建的对象存储在ArrayList<CarPart> parts
变量中。
我想检查三件事:
- 我的车有轮子吗?
- 我的车有发动机吗?
- 我的车有刹车吗?
我可以编写hasWheels
函数,然后再次编写相同的代码,但将 Wheels 替换为Engine
,然后替换为Brake
。它的所有重复代码。有没有办法可以将参数传递给像这样的函数doesArrayContain(parts, Wheels)
?
public boolean hasWheels(ArrayList<CarPart> parts) {
for (CarPart part : parts) {
if (part instanceof Wheels)
return false;
}
return true;
}
像这样的东西
public boolean doesArrayContain(ArrayList<CarPart> parts, Type type) {
for (CarPart part : parts) {
if (part instanceof type)
return false;
}
return true;
}
解决方案
您可以使用类中的 instanceOf 方法,“Class”
此外,您的逻辑似乎有缺陷,当列表确实包含时,您会返回 false。(除非你把它命名错了?)所以我交换了返回语句。
public boolean doesArrayContain(ArrayList<CarPart> parts, Class<? extends CarPart> type) {
for (CarPart part : parts) {
if (type.isInstance(part.getClass()))
return true;
}
return false;
}
像使用它一样doesArrayContain(myList, Wheels.class)
推荐阅读
- android - 为什么从 constraint-layout-1.0.2 切换到 1.1.3 会破坏我的自定义工具栏?
- excel - 是否有带有 LOOP 计算的 Excel 工作表功能?
- php - Laravel 5:更改通过 $request 传递的数组
- python - 将新 ips 插入列表
- macos - mac上的QT-creator,没有例子
- python - 带有附加线程的 Flask 和 Gunicorn
- c# - Xamarin - 检查连接的通用方法
- android - 捕获 SDK 请求电池电量不工作
- regex - 正则表达式查找以'-'为星号并以')'结尾但不包含'('的字符串
- javascript - 如何使用 html webpack 插件将文件加载器所需的 css 文件包含到 index.html 中