不可比较的类型:java.lang.Class<;捕获#1个?扩展T[]>;和java.lang.Class<;java.lang.Object[]>;
当我在Arrays类中使用一些方法时,我试图理解java中的强制转换 我使用IntelliJ IDEA,并采用以下方法不可比较的类型: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[]
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)