Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不可比较的类型:java.lang.Class<;捕获#1个?扩展T[]>;和java.lang.Class<;java.lang.Object[]>;_Java_Casting - Fatal编程技术网

不可比较的类型:java.lang.Class<;捕获#1个?扩展T[]>;和java.lang.Class<;java.lang.Object[]>;

不可比较的类型:java.lang.Class<;捕获#1个?扩展T[]>;和java.lang.Class<;java.lang.Object[]>;,java,casting,Java,Casting,当我在Arrays类中使用一些方法时,我试图理解java中的强制转换 我使用IntelliJ IDEA,并采用以下方法 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[]

当我在Arrays类中使用一些方法时,我试图理解java中的强制转换

我使用IntelliJ IDEA,并采用以下方法

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    @SuppressWarnings("unchecked")
    T[] copy = ((Object)newType == (Object)Object[].class)
        ? (T[]) new Object[newLength]
        : (T[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}
IDE建议强制转换到(对象)是多余的

移除铸件会导致以下错误

Incomparable types: java.lang.Class<capture#1 of ? extends T[]> and java.lang.Class<java.lang.Object[]>

不会产生此错误


我不明白为什么它不产生这个错误,有人能解释一下吗?

不可比较类型错误告诉你,比较两个不可能相等的东西是没有意义的

例如,
Integer.valueOf(0)==“
中没有任何意义,因为它们不是相同的类型;一个也不是另一个的超类型。它永远是假的

如果两者都是类类型(与接口相反),编译器将阻止
a==b
,并且
a=b
b=a
都是不允许的


因此,您被告知一个
类不可比较类型错误告诉您,比较两个不可能相等的事物是没有意义的

例如,
Integer.valueOf(0)==“
中没有任何意义,因为它们不是相同的类型;一个也不是另一个的超类型。它永远是假的

如果两者都是类类型(与接口相反),编译器将阻止
a==b
,并且
a=b
b=a
都是不允许的


因此,您被告知
在该方法中有一个冗余的东西是U。不需要它,只需在参数类型中使用Object[]。
-您是否建议更改JDK?OP发布的方法取自
java.util.Arrays
class.@Eran您认为有必要吗?我并不是真的建议JDK应该改变,但既然OP是在问不同的比特有什么作用,值得一提的是,如果你重新开始,你就不需要它了。我没有这么说,但如果你建议改变JDK方法,我认为你应该解释/证明这样的更改。@你能解释一下
你不能将一种类型的引用分配给另一种类型的变量。
编译器会阻止a==b
--->你的意思是如果我尝试
((t)newType==(U)Object[].class)
编译器会阻止它吗?
该方法中有一个多余的东西是U。不需要它,只需在参数类型中使用Object[]。
-您是否建议更改JDK?OP发布的方法取自
java.util.Arrays
class.@Eran您认为有必要吗?我并不是真的建议JDK应该改变,但既然OP是在问不同的比特有什么作用,值得一提的是,如果你重新开始,你就不需要它了。我没有这么说,但如果你建议改变JDK方法,我认为你应该解释/证明这样的更改。@你能解释一下
你不能将一种类型的引用分配给另一种类型的变量。
编译器会阻止a==b
--->你的意思是如果我尝试
((t)newType==(U)Object[].class)
编译器会阻止它吗?
Incomparable types: java.lang.Class<capture#1 of ? extends T[]> and java.lang.Class<java.lang.Object[]>
T[] copy = (newType == (Object)Object[].class)
T[] copy = ((Object)newType == Object[].class)