我想我在这里遗漏了一些基本的东西。对先前提出的问题的任何解释或指示都将非常有帮助。
import java.util.Arrays;
import java.util.List;
public class St {
public static void bla(Object[] gaga) {
gaga[0] = new Date(); // throws ArrayStoreException
System.out.println(gaga[0]);
}
public static void bla(List<Object> gaga) {
System.out.println(gaga.get(0));
}
public static void main(String[] args) {
String[] nana = { "bla" };
bla(nana); // Works fine
List<String> bla1 = Arrays.asList(args);
bla(bla1); // Wont compile
System.out.println(new String[0] instanceof Object[]); // prints true
System.out.println(nana.getClass().getSuperclass().getSimpleName()); // prints Object
}
}
所以,它看起来像一个 List<String>
不是 List<Object>
的子类但是一个String[]
是 Object[]
的子类.
这是一个有效的假设吗?如果是这样,为什么?如果不是,为什么?
谢谢
最佳答案
Java arrays are covariant ,即它们允许 Object[] foo = new String[2];
。但这并不意味着它们是子类。 String[]
是 Object
的子类(尽管 instanceof
返回 true,String[].class.getSuperclass()
返回 Object
)
关于java - String 数组是 Object 数组的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8825440/