如何替换“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;

}


富国沪深
浏览 80回答 1
1回答

慕尼黑的夜晚无繁华

您可以使用属于类“Class”的instanceOf方法另外,您的逻辑似乎有缺陷,当列表确实包含时,您将返回 false。(除非你命名错误?)所以我交换了 return 语句。public boolean doesArrayContain(ArrayList<CarPart> parts, Class<? extends CarPart> type) {&nbsp; &nbsp; for (CarPart part : parts) {&nbsp; &nbsp; &nbsp; &nbsp; if (type.isInstance(part.getClass()))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; }&nbsp; &nbsp; return false;}像使用它一样doesArrayContain(myList, Wheels.class)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java