This question already has answers here:
Why can't a “Class” variable be passed to instanceof?
(4个答案)
6个月前关闭。
我的Java项目
创建的对象存储在
我想检查三件事:
我的车有车轮吗?
我的车有引擎吗?
我的车有刹车吗?
我可以编写
像这样
像
(4个答案)
6个月前关闭。
我的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'之外的instanceOf方法
另外,您的逻辑似乎有缺陷,当列表包含时,您将返回false。 (除非您给它命名错误?)所以我交换了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 - 如何在“instanceof”函数中替换变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58668185/
10-10 10:56