Java - instanceof的替代方案?

fal*_*ure 0 java recursion nested instanceof

我有一个Shape超类和一个NestedShape子类.该NestedShape亚类具有一个ArrayList(" ShapesList")的Shapes被嵌套在.我需要实现一个'包含'的方法NestedShape.给定一个Shape对象时,该方法应检查该形状是否存在于NestedShapes中ShapeList.我现在的实现非常简单:只需调用ArrayList .contains()方法即可ShapesList.

然而,"包含"方法我也需要实施有检查,对于任何NestedShapeShapesList,那个形状的ShapeList同时不包含被搜索的形状.我这样做的最明显的方法是使用instanceof检查每个ShapeShapeListNestedShape.然后,我猜我会递归调用我的'contains'方法,如果它是一个NestedShape.但是,我不确定这是否是一个很好的方法 - 我听说使用instanceof是不赞成的(同样,我不确定我的使用递归的想法是否会起作用).

有谁能建议一个更好的方法来解决这个问题?

谢谢 :)

JB *_*zet 5

使用多态:

public class Shape {

    public boolean contains(Shape shape) {
        return false;
    }
}

public class NestedShape extends Shape {
    private List<Shape> subShapes = new ArrayList<Shape>();

    @Override
    public boolean contains(Shape shape) {
        if (subShapes.contains(shape)) {
            return true;
        }
        for (Shape subShape : subShapes) {
            if (subShape.contains(shape)) {
                return true;
            }
        }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)