标签: classcastexception

从超类到子类的显式转换

public class Animal {
    public void eat() {}
}

public class Dog extends Animal {
    public void eat() {}

    public void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = (Dog) animal;
    }
}
Run Code Online (Sandbox Code Playgroud)

赋值Dog dog = (Dog) animal;不会生成编译错误,但在运行时会生成一个ClassCastException.为什么编译器无法检测到此错误?

java casting classcastexception

140
推荐指数
4
解决办法
18万
查看次数

java:(String [])List.toArray()给出了ClassCastException

以下代码(在android中运行)总是在第3行给出一个ClassCastException:

final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();
Run Code Online (Sandbox Code Playgroud)

它也发生在v2是Object [0]时,以及当它中有字符串时.任何想法为什么?

java list classcastexception toarray

96
推荐指数
2
解决办法
7万
查看次数

Java中"ClassCastException"的解释

我读了一些关于"ClassCastException"的文章,但我无法对此有所了解.是否有一篇好文章或什么是简短的解释?

java casting classcastexception

71
推荐指数
5
解决办法
23万
查看次数

还有什么可以在java中抛出ClassCastException?

这是一个面试问题.

采访结束了,但这个问题仍在我的脑海中.

我不能问面试官,因为我没有得到这份工作.

场景:

  • 将类C1的对象放入带有键"a"的缓存中

后来的代码:

C1 c1FromCache = (C1) cache.get("a");

此代码抛出ClassCastException.

原因是什么?

我说是因为别人另一个对象放在同一把钥匙上,所以把它覆盖了.我被告知不,想到其他可能性.

我说也许在这个节点上没有定义类C1的jar(不确定这是否会导致类强制转换或ClassNotFoundException,但我现在正在抓住任何领导.然后我说可能是错误的类版本?他们说所有节点都有相同的C1类罐子.

编辑/添加询问获取是否抛出ClassCast但被告知没有.在那之后我告诉他我解决这个问题的行动是放入一个模拟动作的测试jsp,并在异常之后放置更好的日志记录(堆栈跟踪).这是问题的第二部分(如果在生产中发生这种情况,你会做什么以及如果做什么)

有没有其他人对缓存获取为什么会导致演员问题有任何想法?

java caching classcastexception

59
推荐指数
2
解决办法
3590
查看次数

为什么在生成javadoc时会出现ClassCastException?

我正在使用ant生成javadocs,但一遍又一遍地得到这个例外 - 为什么?

我正在使用JDK版本1.6.0_06.

[javadoc] java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl cannot be cast to com.sun.javadoc.AnnotationTypeDoc
  [javadoc]     at com.sun.tools.javadoc.AnnotationDescImpl.annotationType(AnnotationDescImpl.java:46)
  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.getAnnotations(HtmlDocletWriter.java:1739)
  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1713)
  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1702)
  [javadoc]     at com.sun.tools.doclets.formats.html.HtmlDocletWriter.writeAnnotationInfo(HtmlDocletWriter.java:1681)
  [javadoc]     at com.sun.tools.doclets.formats.html.FieldWriterImpl.writeSignature(FieldWriterImpl.java:130)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildSignature(FieldBuilder.java:184)
  [javadoc]     at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.buildFieldDoc(FieldBuilder.java:158)
  [javadoc]     at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
  [javadoc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  [javadoc]     at java.lang.reflect.Method.invoke(Method.java:597)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.FieldBuilder.invokeMethod(FieldBuilder.java:114)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractBuilder.build(AbstractBuilder.java:90)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.AbstractMemberBuilder.build(AbstractMemberBuilder.java:56)
  [javadoc]     at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildFieldDetails(ClassBuilder.java:301)
  [javadoc] …
Run Code Online (Sandbox Code Playgroud)

java ant javadoc classcastexception

53
推荐指数
1
解决办法
2万
查看次数

转换为同一个类时出现ClassCastException

我有2个不同的Java项目,一个有2个类:dynamicbeans.DynamicBean2dynamic.Validator.

在另一个项目中,我动态加载这两个类并将它们存储在一个 Object

class Form {
    Class beanClass;
    Class validatorClass;
    Validator validator;
}
Run Code Online (Sandbox Code Playgroud)

然后我继续创建一个Validator对象validatorClass.newInstance()并使用它validator然后我创建一个bean对象并使用beanClass.newInstance()并将其添加到会话中.

portletRequest.setAttribute("DynamicBean2", bean);
Run Code Online (Sandbox Code Playgroud)

Form项目的生命周期中,我调用validator.validate()从会话中加载先前创建的bean对象(我​​正在运行Websphere Portal Server).当我尝试将此对象强制转换为DynamicBean2失败并出现ClassCastException时.

当我将对象拉回会话时使用

faces.getApplication().createValueBinding("#{DynamicBean2}").getValue(faces);
Run Code Online (Sandbox Code Playgroud)

并使用.getClass()我得到检查它的类dynamicbeans.DynamicBean2.这是我想要将它强制转换为的类,但是当我尝试获取ClassCastException时.

我得到这个的原因是什么?

java reflection classcastexception websphere-portal

51
推荐指数
3
解决办法
7万
查看次数

Android:向ExpandableListView添加标题视图时的ClassCastException

我正在尝试向ExpandableListView添加标头,如下所示:

headerView = View.inflate(this, R.layout.header, null);
expandableListView.addHeaderView(headerView);
expandableListView.setAdapter(new SectionedAdapter(this));
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

 12-08 16:23:42.354:
 ERROR/AndroidRuntime(421): Caused by:java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
 12-08 16:23:42.354:   ERROR/AndroidRuntime(421): at android.widget.ListView.clearRecycledState(ListView.java:504)
 12-08 16:23:42.354: ERROR/AndroidRuntime(421): at android.widget.ListView.resetList(ListView.java:490)
 12-08 16:23:42.354:ERROR/AndroidRuntime(421):at android.widget.ListView.setAdapter(ListView.java:422)
 12-08 16:23:42.354:ERROR/AndroidRuntime(421): at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:475)
Run Code Online (Sandbox Code Playgroud)

这是在电话会议上发生的expandableListView.setAdapter(new SectionedAdapter(this)),但我无法弄清楚原因.有任何想法吗?

android classcastexception expandablelistview android-linearlayout

44
推荐指数
2
解决办法
2万
查看次数

ClassCastException,将Integer转换为Double

ArrayList marks = new ArrayList();
Double sum = 0.0;
sum = ((Double)marks.get(i));
Run Code Online (Sandbox Code Playgroud)

每次我尝试运行我的程序时,都会遇到一个ClassCastException:java.lang.Integer无法强制转换为java.lang.Double

java classcastexception

41
推荐指数
5
解决办法
14万
查看次数

无法强制转换为已实现的界面

我很困惑......

我有一个直接实现接口的类:

public class Device implements AutocompleteResult
{...}
Run Code Online (Sandbox Code Playgroud)

这证明我正在寻找正确的变量:

Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试将类的实例强制转换为接口时:

AutocompleteResult result = (AutocompleteResult) match;
Run Code Online (Sandbox Code Playgroud)

我得到了ClassCastException!

ClassCastException: Device cannot be cast to AutocompleteResult
Run Code Online (Sandbox Code Playgroud)

此外,isAssignableFrom返回false,我不知道为什么:

log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
Run Code Online (Sandbox Code Playgroud)

来自文档:

确定是否类或由这类对象表示接口是任一相同,或是一个超类或的超接口,由指定的Class参数所表示的类或接口.

我不应该总是能够将对象强制转换为其类实现的接口吗?

谢谢.

java inheritance classcastexception

38
推荐指数
1
解决办法
2万
查看次数

android.app.Application无法强制转换为android.app.Activity

我正在尝试LinearLayout从另一个类更改一个,但是当我运行此代码时:

public class IRC extends PircBot {

ArrayList<String> channels;
ArrayList<Integer> userCount;
ArrayList<String> topics;

LinearLayout channelLayout;
Context context;

public IRC(Context ctx) {
    this.setName("xxxx");
    channels = new ArrayList<String>();
    userCount = new ArrayList<Integer>();
    topics = new ArrayList<String>();

    context = ctx;

    channelLayout = (LinearLayout) ((Activity) context).findViewById(R.id.channels);
}
Run Code Online (Sandbox Code Playgroud)

我得到了 ClassCastException

context是Activity使用getApplicationContext()传递的main活动;

logcat的

05-08 17:53:55.102    3736-3799/g.d.allinonechat E/AndroidRuntime? FATAL EXCEPTION: Thread-5357
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
        at g.d.xxx.IRC.<init>(IRC.java:34)
        at g.d.xxx.MainActivity$1.run(MainActivity.java:49)
        at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)

java android classcastexception android-activity

31
推荐指数
2
解决办法
9万
查看次数