How would contravariance be used in Java generics?

后端 未结 3 2115
心在旅途
心在旅途 2020-12-02 10:08

In Java, covariance allows the API designer to specify that an instance may be generalised as a certain type or any of that type\'s subtypes. For example:

Li         


        
3条回答
  •  佛祖请我去吃肉
    2020-12-02 10:42

    Well, your second example would allow you to write:

    Shape shape = getShapeFromSomewhere();
    shapes.add(shape);
    

    whereas you couldn't do that with the first form. It's not useful as often as covariance, I'll grant you.

    One area where it can be useful is in terms of comparisons. For example, consider:

    class AreaComparer implements Comparator
    ...
    

    You can use that to compare any two shapes... so it would be nice if we could also use it to sort a List for example. Fortunately, we can do that with contravariance, which is why there's an overload for Collections.sort of:

    public static  void sort(List list, Comparator c)
    

提交回复
热议问题