如果有Type [],则只能在其中存储Type或其子类型。ArrayList也是如此。那么为什么说一个是同质的而另一个却不是呢?
数组对添加的元素的类型进行运行时检查。也就是说,如果添加了一个不同类型的新元素,则ArrayStoreException
在运行时将引发。这就是为什么它们被认为是“本地的”。
对于ArrayList
s(List
通常是s)而言,情况并非如此。由于在运行时进行类型擦除,因此它实际上可以容纳任何对象。
运行时,以下内容引发异常:
Object[] array = new String[3];
array[0] = "a";
array[1] = 1; // throws java.lang.ArrayStoreException
不同于以下内容,它们可以毫无问题地进行编译和运行(尽管带有编译器警告,因为它未正确使用泛型):
ArrayList list = new ArrayList<String>();
list.add("a");
list.add(1); // OK
list.add(new Object()); // OK
通过正确使用泛型,即在list
type之上声明变量ArrayList<String>
而不是ArrayList
,可以在编译时避免该问题:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add(1); // compilation error
list.add(new Object()); // compilation error
但是,即使有了一个通用声明的列表,您也可以在运行时毫无例外地进行以下工作:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
Method[] methods = List.class.getMethods();
for(Method m : methods) {
if(m.getName().equals("add")) {
m.invoke(list, 1);
break;
}
}
System.out.println(list.get(0));
System.out.println((Object) list.get(1));
输出:
一个
1个
我想创建一个
看着新的Azure cosmos数据库,我对它的多模型特性有点困惑。具体而言,这是否意味着: a)相同的底层数据库/存储可以以多种方式并发查询,以便我可以对相同的集合使用gremlin图查询和mongodb api。 或 b)这是否意味着您可以在预配Cosmos DB时选择不同的模型(图、键值、列、文档),这就是从那时起存储数据的方式。 小册子让它听起来像a),但使用Azure仪表板创建cosmo
Java宣布一个集合为最终集合意味着什么?是不能再添加更多元素了吗?是已经存在的元素不能更改吗?是别的什么吗?
我刚刚浏览了一些代码,我看到了以下方法
问题内容: 据说Javascript的主要优点之一是它是一种基于原型的语言。 但是,Javascript是基于原型的,这意味着什么?为什么这是优点? 问题答案: 原型继承 是一种面向对象的 代码重用形式 。Javascript是使用原型继承的仅有的[主流]面向对象语言之一。几乎所有其他面向对象的语言都是经典的。 在 经典继承中 ,程序员编写一个类,该类定义一个对象。可以从同一类中实例化多个对象,因