Tag: classcastexception

ClassCastException与“无法强制转换”编译错误

为我的OCA Java SE 7程序员考试,所以新手问题。 我有一个我不明白的例子问题。 以下代码编译,但在运行时给出ClassCastException: interface Roamable { } class Phone { } public class Tablet extends Phone implements Roamable { public static void main(String… args) { Roamable var = (Roamable) new Phone(); } } 当我改变Roamable var = (Roamable) new Phone(); 进入Roamable var = (Roamable) new String(); 我马上收到编译错误。 两个问题: 为什么上面的代码完全编译? 电话似乎与Roamable无关? 为什么代码用new Phone()编译,但不用new String()编译?

readResolve无法正常工作? :出现了一个Guava的SerializedForm实例

在我们的一个数据结构的反序列化过程中(使用默认机制(没有自定义writeObject / readObject)),会出现一个ImmutableMap $ SerializedForm实例(来自google的Guava库)。 这样的实例不应该从guava的客户端看到,因为SerializedForm的实例被替换为readResolve(参见com.google.common.collect.Immutable类中的“writeReplace”)。 因此,反序列化失败,并显示以下消息: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableMap$SerializedForm to field .. of type java.util.Map in instance of com.blah.C 这是正确的,因为ImmutableMap $ SerializedForm不是java.util.Map的子类型,但它应该被替换。 出了什么问题? 我们在com.blah.C类中没有自定义的writeObject / readObject。 我们在父对象(包含com.blah.C)中有自定义序列化代码。 更新,这是堆栈跟踪的顶部: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableSet$SerializedForm to field com.blah.ast.Automaton.bodyNodes of type java.util.Set in instance of com.blah.ast.Automaton at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2039) at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1952) at […]

附加对象OutputStream时的ClassCastException

我一直在尝试做一个需要可附加的ObjectOutputStream的小项目。 我已经经历了几个解决方案,我发现这似乎首先解决了我的问题。 但是在我的项目的进一步发展中,我开始遇到意外的exception。 以下是我的课程。 public class PPAccount implements Serializable { private Profile profile; private String email; private float accountBal; private boolean isActivated; private String activationCode; private ArrayList transactions; //a few functions } public class PPRestrictedAccount extends PPAccount { private String parentEmail; private float withdrawLimit; //a few functions } public class PPBusinessAccount extends PPAccount { private […]

MyClass无法强制转换为java.lang.Comparable:java.lang.ClassCastException

我正在做一个java项目,我遇到了这个问题,不知道如何解决它。 我项目中的类(简化): public class Item { private String itemID; private Integer price; public Integer getPrice() { return this.price; } } public class Store { private String storeID; private String address; } public class Stock { private Item item; private Store store; private Integer itemCount; public Integer getInventoryValue() { return this.item.getPrice() * this.itemCount; } } 然后我尝试排序Stock的ArrayList […]

JSF和类型安全

当我挣扎了好几个小时后,我终于找到了那些烦人的ClassCastException来自哪里,我认为这是由Hibernate生成的,它是enum映射。 但它们来自我的JSF视图,我在其中传递了一个List 回到我的支持bean。 我的数据只包含枚举的值: public Role[] getRoles() { return Role.values(); } public Role[] getRoles() { return Role.values(); } 。 当我在User -class中测试roles的setter并得到这个时,我感到非常震惊: public void setRoles(List paramRoles) { System.out.println(paramRoles.get(0) instanceof Role); //output: false for(Role role : paramRoles){ …} //crashes with ClassCastException } 将List paramRoles更改为List paramRoles工作得很好。 这怎么可能? 这些generics不应该是类型安全的还是与JSF相关的类型擦除会导致整个类型的安全问题? 也不应该将h:selectManyCheckbox的返回值设为List ,就像我通过f:selectItems传入的一样?

由于ClassLoader问题导致ClassCastException的解决方案

我有两个ClassLoader加载相同的类。 所以,显然这些不能相互投射。 但是我需要访问在另一个ClassLoader中创建的对象。 我可以访问两个ClassLoader。 如何在其他类中使用该对象? 我不需要将对象转换为与当前ClassLoader匹配。 但问题是返回的对象的类型是Object 。 所以,我必须抛弃该对象来访问某些方法。 我怎样才能做到这一点? 像下面这样的正常转换会导致ClassCastException,我已经知道了。 Mojo mojo = (Mojo) descriptor.getMojo(); descriptor#getMojo()返回Mojo类型的对象,但该方法返回Object 。 怎么办呢? 如果您需要更多信息,请告诉我。 我已经阅读了关于类加载的所有理论,但没有一个为此指定了适当的解决方案。

java.lang.ClassCastException的含义:someClass与someClass不兼容

我在XPage应用程序中经常遇到exception: java.lang.ClassCastException: someClass incompatible with someClass. 两个提到的类都是相同的,它是用作会话bean的类。 我无法谷歌任何覆盖我的问题。 对此的通常解释是设计元素的变化,而不是我的情况。 从那时起,直到重启http任务或重新保存faces-config.xml,XPage应用程序变得不可用(使用会话bean someClass的页面)。 在某些情况下,这与其他例外有关: com.ibm.jscript.InterpretException: Script interpreter error, line=x, col=y: Java method ‘method(signature containg someClass)’ on java class ‘someOtherClass’ not found 这种行为的背后是什么?

为什么在转换为不相关的接口时会编译?

interface Printable {} class BlackInk {} public class Main { public static void main(String args[]) { Printable printable = null; BlackInk blackInk = new BlackInk(); printable = (Printable)blackInk; } } 如果编译并运行前面的代码,则结果是printable = (Printable)blackInk;的ClassCastException printable = (Printable)blackInk; 。 但是,如果将Printable更改为类,则不会编译,因为blackInk无法强制转换为Printable。 当Printable是一个接口时,为什么要编译?

generics,数组和ClassCastException

我认为这里肯定会有一些我不知道的微妙内容。 考虑以下: public class Foo { private T[] a = (T[]) new Object[5]; public Foo() { // Add some elements to a } public T[] getA() { return a; } } 假设您的main方法包含以下内容: Foo f = new Foo(); Double[] d = f.getA(); 您将获得带有消息java.lang.Object的CastClassException ,无法将其CastClassException为java.lang.Double 。 谁能告诉我为什么? 我对ClassCastException理解是,当您尝试将对象强制转换为无法转换的类型时,它会被抛出。 也就是说,它不是一个实例的子类(引用文档)。 例如: Object o = new Double(3.); Double d […]