如何替换 "instanceof" 函数中的变量
How do you substitute a variable in the "instanceof" function
我的 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;
}
您可以使用 class、'Class'
之外的 instanceOf 方法
您的逻辑似乎也有缺陷,当列表确实包含时,您 returning 是错误的。 (除非你命名错误?)所以我交换了 return 语句。
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)
一样使用它
我的 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;
}
您可以使用 class、'Class'
之外的 instanceOf 方法您的逻辑似乎也有缺陷,当列表确实包含时,您 returning 是错误的。 (除非你命名错误?)所以我交换了 return 语句。
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)