$ javac -cp jackson/lib/* jackson/JsonPayment.java && java JsonPayment (21.0.10+7-Ubuntu-124.04) {"type":"card","last4":"4242","amount":500} -> Card[last4=4242, amount=500] equal=true fee=10 {"type":"upi","vpa":"ankur@bank","amount":500} -> Upi[vpa=ankur@bank, amount=500] equal=true fee=0 {"type":"netbanking","bank":"HDFC","amount":500} -> NetBanking[bank=HDFC, amount=500] equal=true fee=15 unknown type: InvalidTypeIdException: Could not resolve type id 'cheque' as a subtype of `JsonPayment$Payment`: known type ids = [card, netbanking, upi] $ javac -cp jackson/lib/* jackson/JsonPayment.java && java JsonPayment (25.0.4.1+1-LTS) {"type":"card","last4":"4242","amount":500} -> Card[last4=4242, amount=500] equal=true fee=10 {"type":"upi","vpa":"ankur@bank","amount":500} -> Upi[vpa=ankur@bank, amount=500] equal=true fee=0 {"type":"netbanking","bank":"HDFC","amount":500} -> NetBanking[bank=HDFC, amount=500] equal=true fee=15 unknown type: InvalidTypeIdException: Could not resolve type id 'cheque' as a subtype of `JsonPayment$Payment`: known type ids = [card, netbanking, upi] $ javac -cp jackson/lib/* jackson/JsonPayment.java && java JsonPayment (27+35) {"type":"card","last4":"4242","amount":500} -> Card[last4=4242, amount=500] equal=true fee=10 {"type":"upi","vpa":"ankur@bank","amount":500} -> Upi[vpa=ankur@bank, amount=500] equal=true fee=0 {"type":"netbanking","bank":"HDFC","amount":500} -> NetBanking[bank=HDFC, amount=500] equal=true fee=15 unknown type: InvalidTypeIdException: Could not resolve type id 'cheque' as a subtype of `JsonPayment$Payment`: known type ids = [card, netbanking, upi] $ javac -cp jackson/lib/* jackson/JsonForgotten.java && java JsonForgotten (21.0.10+7-Ubuntu-124.04) write : {"type":"JsonForgotten$Wallet","amount":500} read : InvalidTypeIdException: Could not resolve type id 'wallet' as a subtype of `JsonForgotten$Payment`: known type ids = [card, upi] $ javac -cp jackson/lib/* jackson/JsonForgotten.java && java JsonForgotten (25.0.4.1+1-LTS) write : {"type":"JsonForgotten$Wallet","amount":500} read : InvalidTypeIdException: Could not resolve type id 'wallet' as a subtype of `JsonForgotten$Payment`: known type ids = [card, upi] $ javac -cp jackson/lib/* jackson/JsonForgotten.java && java JsonForgotten (27+35) write : {"type":"JsonForgotten$Wallet","amount":500} read : InvalidTypeIdException: Could not resolve type id 'wallet' as a subtype of `JsonForgotten$Payment`: known type ids = [card, upi] $ javac -cp jackson/lib/* jackson/JsonNoSubTypes.java && java JsonNoSubTypes (21.0.10+7-Ubuntu-124.04) write : {"type":"Card","amount":500} sealed, Card : Card[amount=500] sealed, Upi : Upi[amount=500] sealed, Cheque: InvalidTypeIdException: Could not resolve type id 'Cheque' as a subtype of `JsonNoSubTypes$Payment`: known type ids = [Card, Upi] plain, OpenCard: InvalidTypeIdException: Could not resolve type id 'OpenCard' as a subtype of `JsonNoSubTypes$OpenPayment`: known type ids = [] $ javac -cp jackson/lib/* jackson/JsonNoSubTypes.java && java JsonNoSubTypes (25.0.4.1+1-LTS) write : {"type":"Card","amount":500} sealed, Card : Card[amount=500] sealed, Upi : Upi[amount=500] sealed, Cheque: InvalidTypeIdException: Could not resolve type id 'Cheque' as a subtype of `JsonNoSubTypes$Payment`: known type ids = [Card, Upi] plain, OpenCard: InvalidTypeIdException: Could not resolve type id 'OpenCard' as a subtype of `JsonNoSubTypes$OpenPayment`: known type ids = [] $ javac -cp jackson/lib/* jackson/JsonNoSubTypes.java && java JsonNoSubTypes (27+35) write : {"type":"Card","amount":500} sealed, Card : Card[amount=500] sealed, Upi : Upi[amount=500] sealed, Cheque: InvalidTypeIdException: Could not resolve type id 'Cheque' as a subtype of `JsonNoSubTypes$Payment`: known type ids = [Card, Upi] plain, OpenCard: InvalidTypeIdException: Could not resolve type id 'OpenCard' as a subtype of `JsonNoSubTypes$OpenPayment`: known type ids = []