- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过说明类型删除来向某人解释它,但我发现了一些意想不到的东西。这是我尝试过的片段:
Object o = new ArrayList<Integer>();
List<String> list = (List<String>) o;
list.add("Oups");
System.out.println(list);
我原以为这会在最后一行抛出 ClassCastException
(或类似的内容),但事实并非如此。我还尝试在转换为 Object
之前用整数值填充 ArrayList
,结果是相同的。
为什么这与
不同Integer[] arr0 = { 1,2,3,4 };
Object[] arr1 = arr0;
arr1[3] = "hey";
哪个会抛出异常 (ArrayStoreException
)?
最佳答案
(因问题更改而更新。)
最后一行不会抛出异常,只是因为 ArrayList
的 toString()
实现根本不关心元素类型。简而言之,它对存储在其内部 Object[]
元素数组中的每个对象递归调用 toString()
,因此无需检查其运行时类型元素。
但是,这段代码实际上也不会失败:
List<Integer> il = new ArrayList<Integer>();
Object o = il;
List<String> sl = (List<String>)o;
sl.add("Oups");
System.out.println(il.get(0));
这是因为 System.out.println
的参数类型是 Object
,因此编译器优化了对 Integer
的隐式转换在 get()
点,因为它并不是严格意义上的“必要”。人们可能会或可能不会争论这对编译器来说是不好的,因为早期的转换会更早地检测到错误,但事实就是如此。
另一方面,用此替换最后一行会抛出异常:
System.out.println(il.get(0) + 5);
因为现在您正在执行一个操作,该操作假定元素为Integer
,并且转换包含在生成的代码中。
另一方面,原始数组具有其元素类型的运行时知识,并将在每次插入时断言它。
关于java - 通过类型删除来欺骗集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006322/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我有一个只适用于火线摄像头的第三方视觉库,是否有可能以某种方式欺骗 libdc1394 认为连接了火线摄像头但通过 v4l 从 USB 网络摄像头传递帧? 最佳答案 鉴于 stackoverflow
在浏览网页时,我需要为我正在查看的网站伪造我的屏幕分辨率,但保持我的视口(viewport)不变(Chrome 或 FF 的模拟无法解决我的问题)。 例如,如果我转到 http://www.whati
假设情况。我在 *nix(linux、BSD 等)中有一个命令行程序。编写它是为了让您将文本文件作为参数传递给它 $ program file.txt 运行程序,它会查看 file.txt 中的文本。
我从欺骗中搜索了 proctecting .net 程序集并找到了 this post很有用。但是,我在帖子中看到了一个非常明显的矛盾。有一点表明,如果用户是同谋,强名称就没有用: But if th
我有一个已加密的 JWT,希望存储在 HttpOnly 安全 cookie 中并通过 SSL 发送。但是,由于我在第一次访问我的网站时没有设置 cookie,那么在我创建 cookie 之前,如何阻止
我想制作一个应用程序,作为第三方应用程序的便捷入口点,使用我的参数启动其 Activity 之一,而不是单击它来执行相同的操作。我对第三方应用程序有一些了解:我需要一个带有单个 .putExtra 的
我将 HtmlAgilityPack 用作自动化流程的一部分,以从现有内部网页中提取内容。问题是我需要让它认为 IsPostBack 是真的。 这是流程: 对页面进行初始调用并提取 HTML。 解析
我在 ARM Cortex-M0 的一些旧版 ROM 代码中遇到了挑战 ROM 代码有其数据存储部分,并且在某些时候它通过函数指针列表从其他 volatile 存储器调用函数。 我目前已用完添加代码的
我一直想知道是否有一种方法可以欺骗导航器、屏幕等 JS 对象,以便在页面请求时发送虚假数据。 我使用 C# 开发一个包含 GeckoFx 浏览器的应用程序,我想做这样的事情:每次我打开一个包含 JS
我想知道是否有一种方法可以将 SuperType 数组转换为 SubType 数组。像这样: SubType[] subArray = (SubType[])someSuperTypeArray; 我
我的所有功课都使用平板电脑,因为我没有一台好电脑,但网站通常以移动设备格式出现。有没有办法设置我的浏览器来告诉网站它是一台电脑,而不是平板电脑?如果可能的话,这是否会导致任何其他问题,例如禁用触摸屏或
我想按照类(class)大纲学习这个概念。我需要一些想法来进行 ICMP 欺骗。我在网上找到了 ICMP 欺骗程序,但我必须这样做:当主机 ping 一个未知的 ip 地址时,无论它是否存在,都必须有
我正在使用 PayPal Hosted Pages 构建一个注册系统。据我了解,我可以使用 Silent POST 功能让我的应用程序知道托管结帐页面上何时发生了成功的交易。我担心可能会欺骗此 POS
我正在尝试编写一个应用程序,它只是作为一个已经存在的网站的界面。没有 API,因此将进行大量的 POSTing、GETing 和 XML 解析。 问题 1:“您需要在浏览器中启用 JavaScript
我们已经使用带有设置 cookie 的 PHP 创建了一个数据库驱动的网站,现在需要防止 HTTP 欺骗,关于如何做到这一点有什么想法吗?我们是这方面的初学者,所以任何帮助都会很棒 最佳答案 您不能“
如果我将这两者都放入数据库中,是否足以防止站点访问者欺骗他们来自不同的 IP 地址? $ip1 = $_SERVER['HTTP_X_FORWARDED_FOR']; $ip2 = $_SERVER[
当我在一些表之间进行内部联接时,我遇到了一些查询抛出重复的问题。 本质上,我加入了一些标签,以及基于 videoId 的 channel (想想流派),这样一个特定的视频文件就可以有多个标签并成为多个
据我所知,没有什么可以限制任何开发人员对他们的信标进行编程以使用特定的 UUID、主要、次要或标识符。 如果我创建一个 UUID 为“foo”的 iBeacon,如何防止其他开发人员创建具有相同 ID
我希望构建一个简单的服务器来代理我网络网关处的 TCP 连接(无恶意),但 TCP 握手失败。 使用 netfilter,我已经设法更改传入 TCP 数据包的 IP 和端口,以便将它们转移到我的应用程
我是一名优秀的程序员,十分优秀!