Just to be sure, when we have a switch like Object object = ... switch(object) { case Box(Circle circle): ... case Box(Square square): ... }
We have agreed that case Box(Foo ..) is equivalent to an instanceof + a call to the deconstructor, but i don't think we have agree what the equivalent code should be, either if (object instanceof Box(var value)) { if (value instanceof Circle circle) { ... } else if (value instanceof Square square) { ... } } or if ((object instanceof Box(var value)) && (value instanceof Circle circle)) { ... } else if ((object instanceof Box(var value)) && (value instanceof Square square)) { ... } It's important because if Box is a class with a deconstructor, i can insert a side effect in it and see how many times the deconstructor of Box is called. Given that i don't see the point of calling the deconstructor twice, in my mind, the switch is equivalent to the code with nested ifs and not the one with plain ifs. But re-reading the last document sent by Brian, i'm not sure anymore. regards, Rémi