gpt4 book ai didi

java - 为什么这段代码可以编译? (java泛型方法)

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:26 24 4
gpt4 key购买 nike

以下代码:

import java.util.*;

public final class JavaTest {
public static <T extends Comparable<? super T>> int max(List<? extends T> list, int begin, int end) {
return 5;
}

public static void main(String[] args) {
List<scruby<Integer>> List = new ArrayList<>();
JavaTest.<scruby>max(List, 0, 0); //how does this compile?, scruby doesn't meet
//T extends Comparable<? super T>
}
}

class scruby<T> implements Comparable<String>{
public int compareTo(String o) {
return 0;
}
}

语句 JavaTest.max(List, 0, 0) 如何编译? scruby如何满足

T extends Comparable <? super T>

它实现了Comparable<String>哪个不是 super 磨砂膏?如果将其更改为 scruby<Integer>它不会编译并给出错误。那么为什么现在编译呢?为什么原始类型可以编译?

最佳答案

JavaTest.<scruby>max(List, 0, 0);

scruby 是原始类型。这会抑制一些类型检查。

您应该添加所有必需的类型参数:

JavaTest.<scruby<Integer>>max(List, 0, 0);

或者让 Java 推断它们:

JavaTest.max(List, 0, 0);

关于java - 为什么这段代码可以编译? (java泛型方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com