Java Generic with Restricted Wildcards

What is the difference between class declarations

public abstract class Super1<T extends Super1<T>> {...}  

and

public abstract class Super2<T extends Super2<? super T>> {...}

Using the 1st method, I managed to create subclasses (similar to Enumtypes in Java)

public class Sub1 extends Super1<Sub1> {...}

but I wanted to know if it is even possible to declare a class, such as 2nd, .. is there any value for it, but I could not create a subclass, for example

public class Sub2 extends Super2<Object> {...}

I thought Object can be used as a super-type for T? Another form I can think of is

public abstract class Super3<T extends Super3<? extends T>>

I am trying to learn generics and any help is appreciated.

+3
source share
1 answer

, . Self-Referential .

. , Car, a Comparable<Car> Car - Mercedes:

class Car implements Comparable<Car> { ... }
class Mercedes extends Car { }

, Mercedes , , Comparable<Mercedes> , :

class Mercedes extends Car implements Comparable<Mercedes> { }

.. , . , Mercedes Comparable<Car>, Comparable<Mercedes>, .

Futher. :

, Comparable<Mercedes> . Mercedes, Comparable<Car>.

, :

class Garage<T extends Comparable<T>> { }

, Car, Mercedes, :

Garage<Car> carComp = new Garage<Car>();
Garage<Mercedes> mercedesComp = new Garage<Mercedes>();

? , . Mercedes , T extends Comparable<T>. Mercedes a Comparable<Car>. , ?

. Garage - :

class Garage<T extends Comparable<? super T>> { }

.., , Mercedes .

+6

All Articles