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

创建一个数组来存储Java中的泛型类型

吕琪
2023-03-14
问题内容

假设我必须创建一个存储ArrayList的Integers数组,并且数组大小为10。

下面的代码可以做到这一点:

ArrayList<Integer>[] pl2 = new ArrayList[10];

问题1:

我认为更合适的代码是

ArrayList<Integer>[] pl2 = new ArrayList<Integer>[10];

为什么这不起作用?

问题2:

下面两个都编译

  1. ArrayList<Integer>[] pl2 = new ArrayList[10];
  2. ArrayList[] pl3 = new ArrayList[10];

有什么区别尽可能的引用声明pl2pl3关注?


问题答案:

问题1:

基本上,这是Java语言禁止的。Java语言规范中的泛型部分对此进行了介绍。

使用时

ArrayList<Integer>[] pl2 = new ArrayList[10];    // warning

您会收到编译器警告,因为以下示例将进行编译(为每行代码生成警告):

ArrayList wrongRawArrayList = new ArrayList();      // warning
wrongRawArrayList.add("string1");                   // warning 
wrongRawArrayList.add("string2");                   // warning

pl2[0] = wrongRawArrayList;                         // warning

但是现在您本应包含ArrayList的数组Integer完全包含错误ArrayListString对象。

问题2:

正如已经回答的那样,声明of p12为您提供了编译时检查,并在从中获取项目时使您不必使用强制转换ArrayList

稍微修改了前面的示例:

ArrayList<Integer>[] pl2 = new ArrayList[10];                // warning

ArrayList<String> wrongArrayList = new ArrayList<String>();  // OK!
wrongArrayList.add("string1");                               // OK! 
wrongArrayList.add("string2");                               // OK!

pl2[0] = wrongArrayList;                                     // ERROR

现在,由于您使用的是泛型,因此无法编译。但是如果你用

ArrayList[] pl2 = new ArrayList[10];

您将获得与第一个示例相同的结果。



 类似资料:
  • 问题内容: 如何创建泛型类型的数组?通用方法如何工作?它返回通用数组的副本。因此可以创建通用数组。但是如何?怎么能写一个类似的方法呢? 问题答案: 如果需要在运行时创建它,则至少需要在此时知道类型,因此可以使用以下方法: where 是泛型类型,是的类,并且是初始大小。 这里的文件

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 问题内容: 我有一个我必须验证问题值的对象,这些对象的某些属性是自定义对象的数组。这样一来,这将涉及到数组的各个元素。为每个元素执行吸气剂,例如: 这是我需要达到的。我已使用带有属性列表的枚举以以下方式提取了数据。 致电: 我将使用数组中不同类型和不同值的多个数组。我想创建一个如下的方法。 这给了我多个错误,这些错误主要与repeatingGrp []有关。数组类型应与枚举名称相同。是否可以创建这

  • 问题内容: 是否可以在Java中创建泛型类型的实例?我正在根据我所看到的答案进行思考no(由于类型擦除),但是如果有人能看到我所缺少的内容,我将很感兴趣: 编辑:事实证明,超级类型令牌可以用于解决我的问题,但是它需要很多基于反射的代码,如下面的一些答案所示。 问题答案: 你是对的。你做不到。但你可以将其更改为 但这有效。以工厂模式包装它会使它更具容忍性。

  • 我试着做这样的事:- myObject是一个类。我得到这个错误:-泛型数组创建(箭头指向New.)