首页 > 解决方案 > 如何在“instanceof”函数中替换变量

问题描述

我的java项目中有以下类WheelsEngine它们Brake都实现了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;
}

标签: javafor-loopinstanceof

解决方案


您可以使用类中的 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)


推荐阅读