Type constraints (bounds) restrict which types can be used as a type argument. This lets you call specific methods on the type parameter — something impossible with an unbounded T.
Upper Bound — extends
Type constraints (bounds) restrict which types can be used as a type argument. This lets you call specific methods on the type parameter — something impossible with an unbounded T.