如何在“ instanceof”函数中替换变量

问题描述 投票:0回答:1

我在Java项目WheelsEngineBrake中具有以下类别,它们都实现了CarPart

创建的对象存储在ArrayList<CarPart> parts变量中。

我想检查三件事:

  1. 我的车上有车轮吗?
  2. 我的车上有引擎吗?
  3. 我的车有刹车吗?

我可以编写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;
}
java for-loop instanceof
1个回答
0
投票

您可以使用类'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)一样使用

© www.soinside.com 2019 - 2024. All rights reserved.