为什么 Java 允许类型不安全的数组赋值?

2024-01-22

一般来说,Java 可以被认为是一种类型安全的语言。我知道泛型存在一些缺陷,但我最近遇到了一个以前从未遇到过的问题。 分解它:

Object[] objects = new Integer[10];
objects[0] = "Hello World";

不会像预期的那样导致编译时错误。我假设数组的声明Object将不允许指向其他内容的数组。在泛型中,我不允许做出这样奇怪的事情,例如:

ArrayList<Object> objs = new ArrayList<Integer>

如果我试图欺骗 Java 做一些事情

ArrayList<? extends Object> objects = new ArrayList<Integer>

我可以声明它,但我只能添加类型的对象null.

为什么 Java 不阻止声明这种奇怪的数组呢?


首先,我应该指出这是类型安全的。

Object[] objects = new Integer[10];
objects[0] = "Hello World";

因为会抛出异常。 (它不是静态地类型安全...但这完全是不同的说法。)

Java 允许这样做的原因是历史性的。在 Java 5 之前,Java 不支持任何形式的泛型。 Gosling 表示,如果他们有时间弄清楚泛型并将其合并到 Java 1.0 中,他们就会这样做。

不幸的是,他们没有。但他们仍然希望能够编写具有以下签名的通用排序方法之类的东西:

    void sort(Object[] array, Comparator comp) ...

为了使这个方法适用于任何类型的对象数组(没有泛型),有必要使数组协变;即使通过String[] or Integer[]作为正式类型为的参数Object[]。如果他们没有这样做,你就必须复制String[] to an Object[],排序,然后复制回来。

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

为什么 Java 允许类型不安全的数组赋值? 的相关文章

  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 如果一个多维数组中的子数组与另一个多维数组不同,则覆盖该子数组

    我坚持这个问题 真的不知道如何解决 我有两个多维数组 需要将第二个数组中的每个 entry id 与第一个数组进行匹配 然后需要检查第二个数组中的每个 file no 是否在数据库 第一个数组 中 并且 status 是否与第一个数组匹配
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 按降序排序映射java8 [重复]

    这个问题在这里已经有答案了 private static
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • ArraySlice 中的 Swift [重复]

    这个问题在这里已经有答案了 在数组上使用 prefix 方法后 我得到了所谓的 arraySlice 我怎样才能将其转换为数组 我试图从 FacebookGraphApi 获取 Ints 然后请求前 3 个 前缀 3 并尝试将它们添加到新数
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 在 BaseController 的 OnActionExecuting 之前调用 FilterAttribute 的 OnActionExecuting

    我有一个BaseController我在其中放入了一些数据ViewData通过覆盖进行收集OnActionExecuting 现在我有一个动作ChildController不需要该视图数据 为此我创建了一个DontPopulateViewD
  • 为什么从匿名内部类访问时要求局部变量是final的?

    我们都知道你不能做这样的事情 int a 7 new Runnable public void run System out println a run 没有做a最终的 我明白了其中的技术原因 这是因为局部变量存在于堆栈中 除非您知道它不会
  • 可见光谱的RGB值

    I need an algorithm or function to map each wavelength of visible range of spectrum to its equivalent RGB values Is ther
  • WinRT 替换 System.Environment.TickCount

    System Environment TickCount 的 WinRT 替代品是什么 它应该是可用的 因为它没问题 http msdn microsoft com en us library windows apps br205762 a
  • 如何在Python中检查一个数字的所有数字是否都是奇数?

    有人告诉我要解决一个问题 我必须找出全部由奇数组成的 4 位数字的个数 我尝试了以下 python 代码 new list A list which holds the numbers for a in range 1111 10000 f
  • 为什么我的 AJAX 函数多次调用回调?

    我制作了一个 ajax post 函数 当我调用它一次时 传递给它的回调函数最终会被调用 3 次 为什么回调会被多次调用 我正在尝试使用一种 模块 javascript 模式 该模式使用闭包将类似的功能包装在一个全局变量下 我的 ajax
  • Magento 多商店 URL 重写

    我们正在开发一个 Magento 网站 该网站有几个不同的商店 我们正在努力重写 url 以便当您位于特定商店时 商店名称会添加到 url 中 我们尝试了几种不同的方法 首先 在 系统 gt 配置 gt Web 中打开 将商店代码添加到 U
  • 变量的重用

    我正在开发的项目需要多次调用相同的方法 但参数不同 我可以使用相同的变量还是必须声明另一个变量 例如 HttpWebRequest req HttpWebRequest WebRequest Create domains ServiceLo
  • 部署 Django/Heroku 时 PySFTP 失败,并显示“No hostkey for host X found”

    我正在尝试部署一个 Django Web 应用程序 该应用程序使用 pysftp 通过某些视图访问 SFTP 服务器 这个东西在本地开发中运行得很好 但是当尝试在 Heroku 上进行第一次部署时 下面的回溯似乎以错误结束 似乎我需要配置主
  • 从命令行将 mysql 数据库转储为纯文本 (CSV) 备份

    我想避免 mysqldump 因为它以只方便 mysql 读取的形式输出 CSV 似乎更通用 每个表一个文件就可以 但如果 mysqldump 有优点 我会洗耳恭听 另外 我想要一些可以从命令行 linux 运行的东西 如果那是一个 mys
  • 我应该检查 malloc() 是否成功吗?

    应该在每次之后检查一次malloc 如果成功了 有没有可能malloc 失败 然后会发生什么 在学校我们被告知我们应该检查 即 arr int malloc sizeof int x y if arr NULL printf Error A
  • 单击 - 如何在带有位置参数的命令下嵌套子命令?

    我正在转移一个开源项目的 https github com ManimCommunity manim从 argparse 到 CLI 单击 目前该库允许以下内容CLI 使用模式 https docs manim community en l
  • 如何防止字符指针缓冲区溢出?

    i e int function char txt sprintf txt select from s table How do I set last char in buffer to NULL here 因此 如果表中的文本长度为 50
  • createElement() +appendChild()——DOM 方法

    我试图在 div 内创建一个 a 元素 并在该 a 元素中添加 div 元素中已存在的 img 图像 但是 我对此表示怀疑 因为以下代码不起作用 document querySelectorAll card forEach function
  • 在 C# 中按按钮进行表单验证的最简单方法?

    我有一个基于 C 的 WinForms 应用程序 其中有很多菜单 每个菜单都有多个用于用户输入的控件 所有表单都有 OK 按钮 这些按钮对用户给出的输入进行处理 例如 当用户按下 确定 按钮时 我必须对所有这些控件进行验证 检查输入的字符串
  • Scala:模拟伴随对象和模型与服务方法

    我看到了多个关于如何模拟伴随对象的问题 经常提到的答案是使用 scalamock 但根据doc http scalamock org对于版本 3 模拟伴生对象仍标记为将来使用 那么模拟伴生对象的方法是什么呢 如果没有 是否有比我已经启用测试
  • Graphics.CopyFromScreen [Web 应用程序] + 句柄无效

    我正在使用下面的代码来打印我的网页的屏幕 using Bitmap bitmap new Bitmap 620 850 using Graphics g Graphics FromImage bitmap g CopyFromScreen
  • 批处理文件从exe获取返回值

    我写了一个简单的C程序DOW exe 返回值是星期几 我的批处理文件需要这个 那么我该怎么做 如何获得返回值 DOW exe 涂 我的批处理文件 不起作用 set day DOW exe echo day Use ERRORLEVEL Li
  • 将 Maven 存储库添加到 build.gradle

    我在 Android Studio 中向 build gradle 添加了自定义 Maven 存储库 但未找到依赖项 Maven 存储库和依赖项
  • 为什么 Java 允许类型不安全的数组赋值?

    一般来说 Java 可以被认为是一种类型安全的语言 我知道泛型存在一些缺陷 但我最近遇到了一个以前从未遇到过的问题 分解它 Object objects new Integer 10 objects 0 Hello World 不会像预期的