首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,泛型和PECS:仍然难以理解C部分;具体示例?

Java,泛型和PECS:仍然难以理解C部分;具体示例?
EN

Stack Overflow用户
提问于 2013-06-19 13:39:45
回答 3查看 554关注 0票数 0

我将在这里发布一个链接:Collections.sort()。已经有很多关于PECS范式的文章,包括this one。在我自己的个人代码中,我使用了相当多的泛型,但只使用过P部件(即<X extends SomethingElse>)。

Collections.sort期望它的泛型参数是<T extends Comparable<? super T>>。我看不出super是怎么进去的。你有一个具体的例子说明为什么这是必要的吗?

当我在做这件事的时候,我很担心我也不理解P的全部含义。我读过很多很多的链接,没有明确的证据证明P是P,C是C.

编辑“关于五月”的文章已经有了一个答案:“不,对不起。我读过这个链接,还有很多其他的链接。这仍然没有告诉我这一切背后的核心机制。到目前为止,给我的两个答案给了我暗示,实际上比我目前所能找到的所有链接都多。”

EN

回答 3

Stack Overflow用户

发布于 2013-06-19 13:51:49

例如。

代码语言:javascript
复制
List<Interger> myIntegers = Arrays.asList(5, 2, 3);

List<Long> myLongs = Arrays.asList(5L, 2L, 3L);

MyNumberComparator myNumberComparator = new Comparator<Number>(){...}

Collections.sort(myIntegers, myNumberComparator ); // Number is "super" class of Integer
Collections.sort(myLongs , myNumberComparator ); // Number is "super" class of Long

因此,这里的“超级”允许将MyNumberComparator用于排序整数和排序Longs。

票数 2
EN

Stack Overflow用户

发布于 2013-06-20 21:41:28

我看不出超级英雄在哪里。你有一个具体的例子说明为什么这是必要的吗?

假设您有一个类Animal,它可以与所有Animal的:

代码语言:javascript
复制
public class Animal implements Comparable<Animal>

现在假设您有一个类Dog,它扩展了Animal

代码语言:javascript
复制
public class Dog extends Animal

现在的问题是,Dog能与另一个Dog相比吗?(即你能做myDog.compareTo(yourDog))答案当然是。Dog作为Animal,可与所有Animals相媲美,包括Dogs (以及Cats)。

但是,Dog不实现Comparable<Dog>,因此绑定T extends Comparable<T>不适用于T = Dog

但是对于排序,我们关心的是类型可以与自身进行比较( Dog可以这样做)。因此,合适的最小限制界是T extends Comparable<? super T>,它确实适用于Dog

票数 2
EN

Stack Overflow用户

发布于 2013-06-19 13:53:14

尝试创建一个数字列表:

代码语言:javascript
复制
List<Number> list = new ArrayList<Number>(Arrays.asList(2, 3.14, 5, 0, 42, 2.5));

现在试着对它进行排序:

代码语言:javascript
复制
Collections.sort(list);

看看泛型参数<T extends Comparable<? super T>>,它在本例中相当于<Number extends Comparable<? super Number>>。然而,Number类没有实现这样的比较器。因此,代码不编译,它迫使您创建自己的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17192772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档