Yoda
Yoda

Reputation: 18068

Generic type that accepts types that are implementing Comparable by inheriting it

How to make DataStructure to accept type B without using raw types?

public class Main {
    public static void main(String[] args) {
        DataStructure<A> bo = new DataStructure<>();

        //This doesn't compile because of T extends Comparable<T> 
        DataStructure<B> bst = new DataStructure<>();
    }
}

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

abstract class A implements Comparable<A> {
}

abstract class B extends A /*implements Comparable<B> - illegal*/ {
}

I can change DataStructure signature to: class DataStructure<T extends Comparable> but then I get warning about raw type. I can't do class DataStructure<T extends Comparable<? extends T>> because when T == B the ? extends T is obviously false.

Upvotes: 0

Views: 23

Answers (1)

Andy Turner
Andy Turner

Reputation: 140319

DataStructure<T extends Comparable<? super T>>

Upvotes: 2

Related Questions