public class VisitorAdded { interface Payment { R accept(Visitor v); } interface Visitor { R visitCard(Card c); R visitUpi(Upi u); R visitWallet(Wallet w); } // Wallet added here record Card() implements Payment { public R accept(Visitor v) { return v.visitCard(this); } } record Upi() implements Payment { public R accept(Visitor v) { return v.visitUpi(this); } } record Wallet() implements Payment { public R accept(Visitor v) { return v.visitWallet(this); } } // Two existing operations, neither knows about Wallet: each one now fails to compile. static class Fee implements Visitor { public Long visitCard(Card c) { return 2L; } public Long visitUpi(Upi u) { return 0L; } } static class Label implements Visitor { public String visitCard(Card c) { return "card"; } public String visitUpi(Upi u) { return "upi"; } } }