gpt4 book ai didi

java - 泛型,V 扩展 T,即使类型不兼容也不会出错

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:26 24 4
gpt4 key购买 nike

我是泛型的新手。我从下面的语法中了解到 V 应该是 T 的相同或子类,但是即使 V 是 Integer 而 T String 数组,这也不会显示编译错误并返回 False。

class GenMethDemo {

public static <T ,V extends T> boolean isIn( T x, V[] y) {

for ( int i =0; i< y.length; i++ )
if ( x.equals(y[i]) ) return true;
return false;

}
}



public class App {

public static void main(String[] args) {

String b[] = {"are", "how", "YOU"};

System.out.println(GenMethDemo.isIn(1, b));

}

}

但是如果我替换 <T,V extends T><T extends Comparable<T>, V extends T>行为符合预期。

最佳答案

在 Java 5/6/7 中,传递 Integer作为TString作为V这种通用方法会导致“绑定(bind)不匹配”编译器错误,除非您将第一个参数显式转换为 Object .

在 Java 8 中,由于 improved type inference , 满足 T 之间的关系和 V对于提供的参数,T被推断为 ? extends Object , 这允许 V成为String ,不会导致错误。

当您限制为 <T extends Comparable<T>, V extends T> 时, 没有这样的类型组合 TV可以满足IntegerString --即使T属于最广泛的类型Comparable<Integer> , 它不是 String 的父类(super class)型.因此,您会收到预期的编译器错误。

关于java - 泛型,V 扩展 T,即使类型不兼容也不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091176/

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