为什么 List listOfArrays = Arrays.asList(new Integer[]{1, 2}) 无法编译? [复制]

2024-04-14

1) OK

List<int[]> listOfArrays1 = Arrays.asList( new int[]{1, 2} );

2) OK

List<int[]> listOfArrays2 = Arrays.asList( new int[]{1, 2}, new int[]{3, 4} );

3)编译错误Type mismatch: cannot convert from List<Integer> to List<Integer[]>

List<Integer[]> listOfArrays3 = Arrays.asList( new Integer[]{1, 2} );

4) OK

List<Integer[]> listOfArrays4 = Arrays.asList( new Integer[]{1, 2},  new Integer[]{3, 4} );

这是签名asList: public static <T> List<T> asList(T... a)

asList需要 0 个或多个 T 类型的“a”。我的“a”是new Integer[]{1, 2}它是类型Integer[]。那么,为什么它会生成一个List<Integer>代替List<Integer[]>?


我们来看一下问题示例(3rd):

List<Integer[]> listOfArrays3 = Arrays.asList( new Integer[]{1, 2} );

正如您所展示的,方法签名是:

public static <T> List<T> asList(T... a)

在这种特殊情况下,单个Integer[]正在考虑为T...。可以将数组或未指定数量的同一对象提供给T...。由于您指定了一个数组,因此T被视为Integer (and T...变成Integer[]).

当您提供一个int[]作为单个参数(1st),编译器不会自动将其包装为Integer[]因为这样的对象不同于int[]。因为int不是一个对象,唯一可以容纳的对象类型T is int[](它将参数构建为int[][]).

供应两个int[]s (2nd)更明显,因为编译器只能将两个数组视为T... as int[]s, thus T...也是int[][].

当您提供两个Integer[]s (4th),再次更明显的是,编译器别无选择,只能考虑组成的两个参数T... as Integer[](变成单个数组:Integer[][]).

编辑:提供一个数组作为可变参数:

You can提供单个数组作为可变参数。让我们举一个没有泛型的例子:

public int iLoveMeSomeInts(int...nums)

供应一个int[]将此方法作为参数确实有效。该数组被视为 varargints 用于验证签名的目的,则 vararg 被视为int[]对于该方法的内部逻辑。

你的例子的不同之处在于参数是T...。一个通用的T must是一个对象,所以编译器不能认为int[]作为 vararg 的int...在这种情况下。编译器别无选择,只能考虑int[]作为 vararg 中的单个元素int[]...(因为int[]是一个对象)。这一点没有任何歧义。

然而,因为Integer is一个对象,编译器将使用单个Integer[] as Integer....

更酷的是:如果你想要一个Integer[]使用有问题的方法返回,并且仍然只提供一个Integer[],你可以调用:

Arrays.<Integer[]>asList(new Integer[] {1, 2});

这迫使编译器考虑你的单一Integer[] as Integer[]....

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 List listOfArrays = Arrays.asList(new Integer[]{1, 2}) 无法编译? [复制] 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 将环境变量传递给ant任务,不带ANT_OPTS

    我正在调用 Jasper ant 任务 并且我想设置org apache jasper compiler Parser STRICT QUOTE ESCAPING环境变量 我可以将 ANT OPTS 设置为 Dorg apache jasp
  • 自动释放或不自动释放

    在核心数据编程指南中的以下代码示例中 创建了 NSFetchRequest 使用 autorelease 而 NSSortDescriptor 不是使用 autorelease 创建的 为什么 NSSortDescriptor 不使用 au
  • 带或不带句柄的嵌套 classdef? [复制]

    这个问题在这里已经有答案了 我试图在 Matlab 中使用可更新的对象 类 和嵌套类 我观察到一种似乎是由于句柄状态引起的行为 我写了2个类testA and testB testB是一个调用该类的主类testA作为财产 classdef
  • 在 C++ 中对命令行参数进行排序

    我想对命令行参数数组进行排序 所有参数都是整数 这是我的代码 但它不起作用 include
  • 如何检测 Android 上的 SSL 固定

    我已经安装并配置了sslsplit并生成根证书 并将其添加到手机 Android 中 如何检测 SSL 固定 当您在移动设备和与之通信的服务器之间放置代理时 使用 SSL 证书固定或公钥固定的应用程序应该无法与服务器通信 因为它将接收 ss
  • 重写 has_many 关联 getter

    一个用户可以拥有多辆车 User has many cars Car belongs to user 每次我打电话 user cars它返回的列表cars按默认搜索顺序 如果我希望关联在某个任意字段上排序 我可以这样做 class User
  • Android 保存并从 Sqlite 数据库获取图像

    亲爱的 Android 如何保存图像并从我使用 Android Studio 的 Sqlite 数据库获取图像 可能为时已晚 但对未来的读者有用 import android content Context import android d
  • 删除 ionic 3 中的滑动手势

    我想创建一个离子删除滑动手势 但它似乎不起作用 This is my home page i called it myPage html
  • ASP.NET MVC - 值类型的自定义验证消息

    当我使用 UpdateModel 或 TryUpdateModel 时 MVC 框架足够智能 可以知道您是否尝试将 null 传递到值类型中 例如 用户忘记填写所需的生日字段 不幸的是 我不知道如何覆盖默认消息 需要一个值 在摘要中输入更有
  • 迄今为止的 Groovy 字符串

    我正在用 Groovy 编码 我目前正在尝试将我拥有的字符串转换为日期 而不必做任何过于繁琐的事情 String theDate 28 09 2010 16 02 43 def newdate new Date parse d M yyyy
  • 从 SHA256 解密

    我有将字符串加密为 sha256 并紧邻 base64 的代码 public static string Sha256encrypt string phrase UTF8Encoding encoder new UTF8Encoding S
  • 如何禁用可创建的反应选择组件?

    我不知道使用什么道具来禁用可创建的 React select 组件 它只是丢失了吗 我尝试了常规的 isDisabled 属性但没有成功
  • 查找两个数字之间素数个数的快速算法

    我的问题简化为找到两个给定数字之间的素数数量 我的范围可以大到1 to 1000 因此我需要一些数学优化 显然 在这种情况下 筛法会太慢 是否有任何可以应用的数学优化 例如 采用这个大空间的较小子集并对其余数字进行推断 P S 看起来我可能
  • 如何使用 PHP 检查 MySQL 表是否存在?

    理论上听起来很简单 我已经做了相当多的研究 但很难弄清楚这一点 如何检查 MySQL 表是否存在以及它是否执行某些操作 我想一个简单的 php if else 语句可以解决这个问题 有没有办法做到这一点 这就是我对 cwallenpoole
  • 使用 ICertAdmin2::RevokeCertificate 方法撤销 C# 中的证书

    如何将 certadm dll 导入托管项目并使用 RevokeCertificate 方法 我尝试将其添加为引用 但出现错误 因为它不是程序集或 COM 对象 有任何想法吗 UPDATE 我已经尝试过了regsvr32 c certadm
  • 使用 php 获取服务器内存

    有没有办法用 php 知道服务器 linux 发行版 中的可用内存 不使用 linux 命令 编辑 抱歉 目标是了解特定服务器的服务器 虚拟机中可用的内存 即使该内存是共享的 如果你知道这段代码只能在Linux下运行 你可以使用特殊的 pr
  • SBStatusBarController 实例

    有人可以帮我提供如何获取 SBStatusBarController 实例的小样本吗 我查看了很多论坛和源代码 但它对我不起作用 谢谢 好的 我已经找到了如何在没有 SpringBoard 的情况下使用合法手段显示双高状态栏 如通话中状态栏
  • 如何使用 php 从 json 键值中删除所有双引号?

    我得到了一个json数据 我想从 json 键中删除所有双引号 以便能够解析我想要的数据 如果任何键上没有双引号 我当前的代码运行良好 但一旦键上有双引号 那么我的代码就不会解析 json 数据 谁能告诉我如何解决这个问题 谢谢 code
  • 快速验证、自定义异步检查

    因此 我对此进行了大量研究 但遇到了一些问题 router post register async req res gt const newUser await usersDb Define the user const email req
  • 为什么 List listOfArrays = Arrays.asList(new Integer[]{1, 2}) 无法编译? [复制]

    这个问题在这里已经有答案了 1 OK List