"&" or ",": What is the difference between A<T extends I1 & I2> and A<T extends I1 , I2>

generics, inheritance, java, multiple-inheritance, separator

Solution

A<T extends I1, I2>

is a type `A` with two parameters

- `T` which must be a subtype of `I1`

- `I2`

You can read this as "A <preposition> type T which extends I1 <preposition> type I2", so `SortedMap<Key extends comparable, Value>` is a "map from comparable type key to type value"

A<T extends I1 & I2>

is a type `A` with a single parameter

- `T` which must be a subtype of `I1` and a subtype of `I2`

You can read this as "A <preposition> type T which extends I1 and I2" so a `SortedSerializableSet<T extends Serializable & Comparable>` can be read "a sorted set of elements of type T which is both serializable and comparable"

Problem

Multiple generic interface separator: "," or "&" I was always using `A<T extends I1, I2>` but today, I saw `A<T extends I1 & I2>`. What is the difference between these two notation? Does it have a different meaning? Purpose?

Original source