当前位置: 首页 > 面试题库 >

Java 1.6:创建List

钱志强
2023-03-14
问题内容

为什么我不能创建一个List数组?

List<String>[] nav = new List<String>[] { new ArrayList<String>() };

Eclipse说“无法创建列表的通用数组”

要么

ArrayList<String>[] nav = new ArrayList<String>[] { new ArrayList<String>() };

Eclipse说“无法创建ArrayList的通用数组”

要么

List<String>[] getListsOfStrings() {
    List<String> groupA = new ArrayList<String>();
    List<String> groupB = new ArrayList<String>();
    return new List<String>[] { groupA, groupB };
}

但是我可以这样做:

List[] getLists() {
    return new List[] { new ArrayList(), new ArrayList() };
}

Eclipse表示List和ArrayList是原始类型,但可以编译…

看起来很简单,为什么不起作用?


问题答案:

好吧,泛型教程为你的问题提供了答案。

数组对象的组件类型可能不是类型变量或参数化类型,除非它是(无界)通配符类型。你可以声明其元素类型是类型变量或参数化类型的数组类型,但不能声明数组对象。

当然,这很烦人。为避免出现以下情况,必须使用此限制:

// Not really allowed.
List<String>[] lsa = new List<String>[10];
Object o = lsa;
Object[] oa = (Object[]) o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
// Unsound, but passes run time store check
oa[1] = li;

// Run-time error: ClassCastException.
String s = lsa[1].get(0);

如果允许使用参数化类型的数组,则前面的示例将在编译时没有任何未经检查的警告,但会在运行时失败。我们已经将类型安全性作为泛型的主要设计目标。



 类似资料:
  • 我下载了最新版本的Eclipse(Mars),并在Eclipse中将所需的Java版本更改为1.6。ini文件,因为我的项目使用Java 1.6。 我将Eclipse中安装的JRE配置为使用Java 1.6。但当我尝试执行ant目标时,它会产生一个错误: 不支持低于1.7的JRE版本。 由于我目前无法升级到Java 1.7,在Mars版本中使用Java 1.6有什么解决方法吗?

  • mkdir 可以创建新的目录,touch 可以创建空白的文件。 先进入到某个地方,比如当前登录用户的桌面上: cd ~ mkdir mkdir(make directory),可以创建新的目录。 mkdir 要创建的目录 练习:创建目录 创建一个名字是 awesome-project 的目录,执行: mkdir awesome-project 查看一下: ls 你会看到创建的目录 awes

  • 说明 支付宝境外到店支付-创建商户二维码 官方文档:https://global.alipay.com/service/merchant_QR_Code/15 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\Request 属性 名称 类型 说明 $service string 接口名称 $times

  • 请求地址 https://api.es.xiaojukeji.com/river/Approval/create 返回数据格式 JSON 请求类型 POST 请求参数 参数名称 数据类型 必选 说明 member_type int no 唯一标识类型(0-手机号,1-工号,2-邮箱,默认为0) client_id string yes 申请应用时分配的AppKey access_token str

  • 创建操作符 这些运算符几乎允许你基于任何东西来创建一个 observable 。从一般用例到特殊用例,你都可以做到, 并且鼓励将一切转换成流。 内容 create empty from :star: fromEvent fromPromise :star: interval of :star: range throw timer :star: - 常用 其他资源 从零开始创建 Observable

  • 更新:Oracle已经确认这是一个bug。 Java Beans规范查找返回类型为void的默认setter方法,但它允许通过定制getter和setter方法。最简单的使用方法是指定getter和setter的名称。 这在JDK1.5和JDK1.6中起到了作用,即使它的返回类型不是void,也可以指定setter名称,如下面的测试用例所示: 自定义的示例允许对的编程控制,在Java Beans规

  • 下面包含一个本机查询,我需要在其中设置一个参数,但是由于没有设置参数,所以该查询是错误的 所以返回所有行。怎么了

  • 目录 可以创建多个 store 吗,应该这么做吗?能在组件中直接引用 store 并使用吗? 在 store enhancer 中可以存在多个 middleware 链吗? 在 middleware 方法中,next 和 dispatch 之间区别是什么? 怎样只订阅 state 的一部分变更?如何将分发的 action 作为订阅的一部分? 创建 Store 可以创建多个 store 吗,应该这么