- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是Core Java一书中的例子
两类员工和经理。经理扩展员工。下面的代码
Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
Employee[] emps =mans ;
emps[0] = new Employee ("Charlie");//throws ArrayStoreException in runtime actually;
作者说在这种情况下数组中的元素应该保持相同的类型否则它会抛出ArrayStoreException。在我看来,emps[0] 只是对实例 'new Employee ("Charlie")' 的引用,而 emps[0] 的类型是之前声明的 Employee。那么为什么它会抛出异常。我的基础知识有问题吗?
最佳答案
创建数组时,它会记住要存储的数据类型。所以如果你有课
class Employee { .. }
class Manager extends Employee { .. }
然后你将创建数组
Manager[] arrM = new Manager[10];
数组会记住它只需要存储 Manager 类或其派生类型的实例。但是这样的数组不能存储 super 类型的管理器,因为 super 类型可能没有管理器类的所有方法或字段,所以像
arrM[0] = new Manager();
没问题,但是
arrM[0] = new Employee();
抛出 java.lang.ArrayStoreException: Employee
指出 Employee 在这里不是正确的参数。
所以在你的情况下你是
为经理创建数组
Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
使用父类(super class)型 Employee
创建对此数组的引用
Employee[] emps =mans;
(但这个引用仍然指向可以容纳仅管理人员的数组)
并尝试放入数组new Employee
emps[0] = new Employee("Charlie");
但正如我所提到的,这是不允许的,因为 Employee 可能没有与 Manager 相同的成员。假设 Menager 可以hire(...)
某人,而 Employee 不能(没有此方法)。如果你打电话会发生什么
mans[0].hire(new Employee("Tom");
和 emps[0] = new Employee ("Charlie");
不会抛出异常但会让您将 Employee 放在 emps[0]
中?由于 mans
和 emps
使用相同的数组,这意味着 mans[0].hire(new Employee("Tom")
将被调用来自 Employee("Charlie")
不能雇佣任何人,因为 Employee 没有 hire
方法。
这就是为什么您不能将父类(super class)型 (Employee) 的实例放在 Managers 数组中的原因。
关于java - Java 数组中的 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24207155/
为什么下面的代码会抛出ArrayStoreException? double[] a = {2.0,3.4,3.6,2.7,5.6}; int[] b = {2,3,4,5}; System.arra
当我使用 Junit 进行测试时,我似乎无法运行此测试。它仅在失败跟踪上显示错误和“java.lang.ArrayStoreException”。如果有人能解决我的问题,那将是一个很大的帮助。 Lin
下面是我的代码,用于将字符串转换为其等效的 ascii 字符串。该字符串将只包含数字 - 这就是为什么我为每个字符分配 2 个字节(因为 1 到 9 在 ascii 中分别是 49 到 58)但我收到
private static void genericArrayTest() { ArrayList[] exceptionListArray = new ArrayList[10];
我有一个奇怪的问题。我有三个类(class)。书籍(抽象)和两个子类(小说、非小说)。我创建了书籍引用数组。该数组可以包含两个子类的对象。我有以下 Fiction 类代码。 public class
我读过很多关于 ArrayStoreExceptions 的帖子,其中大部分都属于以下类别之一: 基本误解(将基类放入子类的数组声明中) 在从列表转换为数组时出现类似的错误 围绕数组与泛型的“协变”问
我正在尝试创建一个链表数组来处理散列值冲突。我有一个对象数组,我试图存储 linkedList 但它似乎不起作用。我做错了什么,或者我应该采取更有效的方法。 这是我在运行代码时遇到的错误。 Excep
考虑以下对 Java 的 ArrayList#toArray 方法的测试。请注意,我借用了这个有用的代码 answer . public class GenericTest { public
当我遇到这样的问题时,我正在处理继承。我的代码如下 public class Parent { public void methodParent() {
Object[] o = "a;b;c".split(";"); o[0] = 42; 抛出 java.lang.ArrayStoreException: java.lang.Integer 同时 S
为什么我会收到此异常? java.lang.ArrayStoreException: java.lang.Integer at MyLinkedList.toArray(MyLinkedList.ja
我确实有这样一段代码: List userIdentifiers = getUsersModule().getUsersIdentifiers(); if (userIdentifiers.isEmp
这是Core Java一书中的例子 两类员工和经理。经理扩展员工。下面的代码 Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
我正在存储对 BiConsumers 的引用适应Consumer : public void setConsumer(BiConsumer consumer) { fieldConsumer
我正在尝试运行一个基本的 JUNG 图示例 - 我能够在独立的 java 程序中运行以下代码,但是当我将相同的代码放入使用 Maven 构建的服务器端 jar 中时,它失败了Visualization
我的理解是你会得到 ArrayStoreException当您尝试插入不兼容类型的对象时。 Object[] array = new String[1]; array[0] = 1; 有人可以举个例子
您好,当我尝试将实现接口(interface)的类存储到定义为接口(interface)数组的数组中时,我收到此 Java ArrayStoreException 异常。代码如下: private I
每当我尝试使用 JPA 2.0 和 Websphere 运行更新查询时,都会收到 java.lang.ArrayStoreException。我正在使用测试实用程序,并且成功更新了正确的行等等,没有事
我正在创建一个类,其中包含名为 array 的 Object[] 类型的实例变量。此类包含返回 T[] 的方法,其中 T 是泛型。该方法应将 array 的内容复制到要返回的数组中。相关代码如下所示:
我的问题是,为什么我在线程“main”java.lang.ArrayStoreException 中收到异常: at java.lang.System.arraycopy (native method
我是一名优秀的程序员,十分优秀!