`

<T extends Comparable<? super T>>这个怎么理解

 
阅读更多

? super T : 语法将泛型类限制为所有T的超类(包括T自身)
T extends Comparable  : T为Comparable的子类

我一般都是
class Student implements Comparable{

//////////

}
这么写的啊……

class Student implements Comparable <Student>{
//////////

}
会有什么区别呢?
回答
不写明具体的类型,就是里面的代码写方法的时候,要强制转换
public class Problem<T extends Comparable<? super T>>
 
public static void main(String[] args) {
   Problem<GregorianCalendar> p = null; // 编译正确
}

 

public class Problem<T extends Comparable<T>> 
 
public static void main(String[] args) {
   Problem<GregorianCalendar> p = null;  // 编译错误
}

 

/* 
Calendar实现Comparable接口, GregorianCalendar继承Calendar. 我很不理解
<T extends Comparable<T>> 为何编译不通过. 而<T extends Comparable<? super T>> 却可以? 
*/

/*
如果你想从一个数据类型里获取数据,使用 ? extends 通配符;
如果你想把对象写入一个数据结构里,使用 ? super 通配符;
如果你既想存,又想取,那就别用通配符。

*/
/*
我不清楚你的Calendar,假设class Calendar implements Comparable<Calendar>

如果是T extends Comparable<T>,则相当于GregorianCalendar implements Comparable<GregorianCalendar),这与由GregorianCalendar继承Calendar违背
*/

/*
我现在理解了, Comparable<? super T> 此处会使用类型T或者T的父类. 也就是GregogrianCalendar或者Calendar. 如果是Comparable<T> 那么就只能使用GregogrianCalendar了. 但是GregogrianCalendar没有实现接口. 所以就报错了. 
感谢回答~!
*/

 

分享到:
评论

相关推荐

    collections方法集合

    List&lt;String&gt; flavors = new ArrayList&lt;&gt;(); Collections.addAll(flavors, "Peaches'nPlutonium", "RockyRacoon"); ``` 此例中,`flavors`列表将被填充上指定的字符串元素。 #### 2. `asLifoQueue` 此方法将`...

    java实现数据结构内部排序.pdf

    public static &lt;AnyType extends Comparable&lt;? super AnyType&gt;&gt; void InsertSort(SearchArrayList LA){ for(int i=2; i&lt;=LA.getLength(); i++){ AnyType x = LA.get(i); int j = i - 1; while (j &gt;= 1 && x....

    泛型编程技术

    例如,`List&lt;T&gt;`是C#中的一个泛型类,`IEnumerable&lt;T&gt;`是泛型接口。 C++的模板机制是泛型编程的基础,它可以用于创建泛型类(模板类)和泛型函数(模板函数)。模板允许开发者定义一个可以生成多个不同版本的函数或...

    写出二分法查找算法函数实现。

    public static &lt;T extends Comparable&lt;? super T&gt;&gt; int binarySearch(T[] value, int begin, int end, T key) ``` - **参数说明**: - `T[] value`:表示一个已经按升序排列的数组。 - `int begin`:表示数组中...

    559.557.JAVA基础教程_集合-Collections工具类常用方法的测试(559).rar

    而`copy(List&lt;T&gt; dest, List&lt;T&gt; src)`方法则可以将一个列表的所有元素复制到另一个列表。 在集合的并发处理方面,Collections提供了`synchronizedList(List&lt;T&gt; list)`、`synchronizedSet(Set&lt;T&gt; set)`等方法,返回...

    Java编程实现快速排序及优化代码详解

    public static &lt;T extends Comparable&lt;? super T&gt;&gt; void sort(T[] arr) { sort(arr, 0, arr.length - 1); } public static &lt;T extends Comparable&lt;? super T&gt;&gt; void sort(T[] arr, int left, int right) { if ...

    集合工具类Collections的基本应用

    - `sort(List&lt;T&gt; list)`: 这个方法用于对List接口的实现类对象进行原地排序,要求List中的元素必须实现Comparable接口或者在调用时传入自定义的Comparator。例如,对整型ArrayList进行升序排序可以使用`Collections...

    collection接口的静态方法

    需要注意的是,只有当`List`的元素类型实现了`Comparable&lt;T&gt;`接口时,才能直接调用`sort()`方法进行排序。例如: ```java List&lt;Integer&gt; numbers = Arrays.asList(5, 2, 9, 1, 7); Collections.sort(numbers); ``` ...

    Java泛型总结(2)进阶篇

    这里的 `&lt;T extends Comparable&lt;T&gt;&gt;` 就是一个带有边界约束的类型参数。 3. 类型擦除 Java泛型在编译后会进行类型擦除,这意味着运行时无法获取到泛型的具体类型信息。所有的泛型类型在运行时都会被替换为其边界...

    Collections Framework中的算法(之一)――综述

    extends T&gt; subList)` 和 `Collections.lastIndexOfSubList(List&lt;T&gt; list, List&lt;? extends T&gt; subList)` 用于查找子列表第一次或最后一次出现的位置。 - **二分查找**:`Collections.binarySearch(List&lt;? extends ...

    JavaGenericsjavaTutorial-英文原版.zip

    泛型的基本语法是以尖括号&lt;&gt;来定义类型参数,例如`List&lt;T&gt;`,其中T就是一个类型参数,代表某种未知的类型。在实际使用时,你可以将T替换为具体的类型,如`List&lt;String&gt;`或`List&lt;Integer&gt;`。这样,泛型类或方法就能...

    20_集合_第3天(Map、可变参数、Collections)_讲义

    extends T&gt; src)`将一个List的内容复制到另一个List,`fill(List&lt;T&gt; list, T obj)`用指定对象填充整个List,`binarySearch(List&lt;? extends Comparable&lt;? super T&gt;&gt; list, T key)`进行二分查找等。此外,`...

    java 泛型基础简单事例

    这里,`&lt;T extends Comparable&lt;T&gt;&gt;` 定义了一个类型参数 `T`,并限制 `T` 必须实现 `Comparable` 接口。 4. **通配符**:在某些情况下,我们可能不关心具体类型,只关心它是某种类型的子类型。这时可以使用通配符 ...

    泛型的使用

    这里,`&lt;T extends Comparable&lt;T&gt;&gt;`定义了一个类型参数`T`,并限制`T`必须实现`Comparable&lt;T&gt;`接口,以便进行比较操作。 四、通配符 在处理泛型类型时,通配符允许我们定义更宽松的类型约束。常见的通配符有`?`...

    Java中extends一定是代表继承吗?

    这意味着T类型必须实现Comparable&lt;T&gt;接口的所有方法。 泛型中的extends和super 在Java的泛型中,extends和super关键字用于限定参数类型的上界和下界。 * `&lt;? extends T&gt;`限定参数类型的上界:参数类型必须是T或T...

    Collections源码java-Java-Collection-:对Java的Collection框架源码阅读

    extends T&gt; src)`可以将一个列表的所有元素复制到另一个列表中。 3. **集合查询**:`isEmpty(Collection&lt;?&gt; c)`检查集合是否为空,`max(Comparator&lt;? super T&gt; comparator, Collection&lt;? extends T&gt; coll)`找到...

    黑马程序员----泛型学习注意点

    super T&gt; dest, List&lt;T&gt; src)`,这个方法可以从源列表`src`向目标列表`dest`复制元素,只要`dest`能接受`T`类型的元素即可。 8. 泛型与多态: 泛型与多态相结合,可以创建更加灵活且类型安全的代码。例如,`List...

    29-API-集合框架-泛型-使用_java_

    super T&gt;&gt;`作为参数,这样可以对任意实现了Comparable接口的列表进行排序。 6. **类型推断** 自Java 7开始,编译器可以自动推断泛型类型,称为类型推断。例如,使用`new ArrayList&lt;String&gt;()`时,编译器会自动...

    Java泛型资料

    - 通过`extends`关键字可以指定类型参数的上界,如`class Box&lt;T extends Comparable&lt;T&gt;&gt;`,确保T实现了Comparable接口。 - 多个边界可以通过`&`连接,如`class MultiBound&lt;T extends Runnable & Serializable&gt;`,T...

    JAVA容器的作用和概览

    super T&gt; dest, List&lt;? extends T&gt; src):将源列表的元素复制到目标列表。 Comparable接口: Comparable接口用于定义对象的自然排序,实现该接口的类的对象可以进行比较。通过实现compareTo(T other)方法,我们...

Global site tag (gtag.js) - Google Analytics