Java 数组的子类型
如果我有Java 数组的子类型,java,Java,如果我有A类{和B类扩展{将 B[] b = new B[1]; b[0] = new B(); System.out.println(b instanceof A[]); 打印出正确还是错误?错误 数组不遵循与普通对象相同的规则。如果B可分配给A,则B[]可分配给A[] 但是,这打开了严重影响的大门,这一代码表明: class A {} class B extends A {} class C extends A {} //... B[] bs = new B[2]; A[] as = b
A类{
和B类扩展{
将
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
打印出正确还是错误?错误
数组不遵循与普通对象相同的规则。如果B可分配给A,则B[]可分配给A[]
但是,这打开了严重影响的大门,这一代码表明:
class A {}
class B extends A {}
class C extends A {}
//...
B[] bs = new B[2];
A[] as = bs;
as[0] = new C(); //runtime error
B b = bs[0];
此代码。我们称之为缺乏类型安全性。它将打印
true
// A.java
public class A {}
// B.java
public class B extends A {}
// Test.java
public class Test {
public static void main(String[] args) {
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
}
}
运行时:
> javac *.java && java Test
true
当您尝试它时发生了什么?您没有访问Java编译器或其他什么的权限?我真傻。太懒了,无法创建新的main class=(好吧,您有50/50的机会,很抱歉没有成功。您可能误解了数组和泛型。我记得类型安全的含义,并且错误地记得如何处理它。