黑马程序员技术交流社区

标题: 关于泛型问题 [打印本页]

作者: 浪无痕-陈文坤    时间: 2013-8-6 10:25
标题: 关于泛型问题
本帖最后由 浪无痕-陈文坤 于 2013-8-6 13:54 编辑

import java.util.*;
class Person implements Comparable
{
    String name;
    public Person(String name)
    {
        this.name = name;
    }
    public int compareTo(Object obj)
    {        
        if(!(obj instanceof Person))
            return -1;
        Person p = (Person) obj;
        return this.name.compareTo(p.name);
    }
    public String toString()
    {
        return this.name;
    }
}
class Student extends Person
{
    public Student(String name)
    {
        super(name);
    }
}
class StuComparator implements Comparator<Person>//(? super E)
{
    public int compare(Person p1,Person p2)
    {
    }
}
public class Hello
{

public static void main(String[] args)
{
        TreeSet<Student> p = new TreeSet<Student>(new StuComparator());
}
}
红色部分这个所谓的下限(? super E)的E是不是TreeSet<Student>中所指的Student ?谢谢
作者: 龚首道    时间: 2013-8-6 10:46
<? super E>语法将泛型类限制为所有E的超类(包括E自身)。也就是说,限定为Person及所有Person的父类。不是Student。


作者: 浪无痕-陈文坤    时间: 2013-8-6 11:04
龚首道 发表于 2013-8-6 10:46

谢谢!!!
作者: 李政    时间: 2013-8-6 11:23
本帖最后由 李政 于 2013-8-6 11:24 编辑

楼主说的没错,TreeSet<Student> p = new TreeSet<Student>(new StuComparator());这句话中E指的就是Student

2楼讲的好像不太对吧

参考下API
public TreeSet(Comparator<? super E> comparator)

作者: 龚首道    时间: 2013-8-6 11:26
java.util.TreeSet<E> 代表一个有序的元素为E的树,它其中的一个构造器需要一个Comparator类来比较两个元素,以E为String类时为例,此时的Comparator可以是Comparator<String>,也可以是Comparator<Object>,但Comparator<Integer>就不行,如何表示这样的限制呢?
jdk源代码中是这样的:
public TreeSet(Comparator<? super E> c)
这样就保证了传给构造器的Comparator是可以进行E元素的比较的。
作者: 浪无痕-陈文坤    时间: 2013-8-6 13:29
李政 发表于 2013-8-6 11:23
楼主说的没错,TreeSet p = new TreeSet(new StuComparator());这句话中E指的就是Student

2楼讲的好像不 ...

谢谢!!!
作者: 浪无痕-陈文坤    时间: 2013-8-6 13:53
本帖最后由 浪无痕-陈文坤 于 2013-8-6 14:20 编辑
龚首道 发表于 2013-8-6 11:26
java.util.TreeSet 代表一个有序的元素为E的树,它其中的一个构造器需要一个Comparator类来比较两个元素, ...

谢谢,前面发错了,应该指的是Student(这个?super E 是匹配所有E的超类及其本身,?是匹配传进来的数据,Person 匹配这个<? super E>满足,ok,换句话Person是E(Student)的超类,满足条件)不知道对不对,呵呵,个人看法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2