Option 1:
public class A <T extends Number & Comparable<T>>{}
Your Generic Parameter should extend Number and implements Comparable,
which means class A is a Number and Comparable.
Option 2:
public class B <T extends Comparable<? extends Number>>{}
T is Comparable on Numbers(can compare Number only) but doesn't have to be a Number, unlike option 1
I will explain by example:
A
public class A <T extends Number & Comparable<T>>{}
B
public class B <T extends Comparable<? extends Number>>{}
IntegerWrapper(Option 2)
public class IntegerWrapper implements Comparable<Integer> {
Integer number;
public IntegerWrapper(int number) {
this.number = number;
}
@Override
public int compareTo(Integer o) {
return number.compareTo(o);
}
}
GenericsTest
public class GenericsTest {
public static void main(String args[]){
A myA = new A<Integer>();
B myB = new B<IntegerWrapper>();
}
}
I think option 1 is what you are looking for, because i can't think of many useful scenarios for Option 2(Maybe there is...)