标签: classcastexception

活动启动时的android classcastexception

我在android中有一个简单的活动程序.基本上这个类只是扩展Activity.但是当我启动它时,我在我的类的构造函数中得到一个ClassCastException.我甚至没有定义构造函数,所以它必须在超类的构造函数中是Activity.

不幸的是,调试器没有提供有关它正在尝试强制转换的类的任何详细信息.

这是堆栈跟踪:

Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649  
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125    
    ActivityThread$H.handleMessage(Message) line: 2071  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 868  
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method]  
Run Code Online (Sandbox Code Playgroud)

当我查看runtimeexception时,我得到:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

唯一的代码是

package com.test;
import android.app.Activity;
public class MyApp extends Activity …
Run Code Online (Sandbox Code Playgroud)

android startup classcastexception android-activity

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

List to TreeSet转换产生:"java.lang.ClassCastException:MyClass不能转换为java.lang.Comparable"

List<MyClass> myclassList = (List<MyClass>) rs.get();

TreeSet<MyClass> myclassSet = new TreeSet<MyClass>(myclassList);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这段代码生成这个:

java.lang.ClassCastException: MyClass cannot be cast to java.lang.Comparable
Run Code Online (Sandbox Code Playgroud)

MyClass没有实现Comparable.我只想使用Set来过滤List的唯一元素,因为我的List包含不必要的重复项.

java classcastexception

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

"Iterable <Element>无法强制转换为List <Element>" - 不是`List`是一种`Iterable`吗?

我打电话给一个getElements返回的方法Iterable<Element>.

我这样做了:

List<Element> elements = (List<Element>) getElements();
Run Code Online (Sandbox Code Playgroud)

这会生成错误:

java.lang.ClassCastException: com.utesy.Element$3 
cannot be cast to java.util.List
Run Code Online (Sandbox Code Playgroud)

我以为List是一种Iterable

java iterable list classcastexception

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

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
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为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 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.ArrayList.readObject(ArrayList.java:593)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479)
at com.blah.ast.AstNode.readObject(AstNode.java:189)
at …
Run Code Online (Sandbox Code Playgroud)

java classcastexception guava deserialization

11
推荐指数
1
解决办法
3410
查看次数

在Android中获取所有已安装的应用程序图标:java.lang.ClassCastException

有一个java.lang.ClassCastException当我试图让安装的应用程序图标.

这是我的代码.

public Bitmap getAppIcon(String path) {
        PackageInfo pi = pm.getPackageArchiveInfo(path, 0);
        pi.applicationInfo.sourceDir = path;
        pi.applicationInfo.publicSourceDir = path;
        Drawable icon = pi.applicationInfo.loadIcon(pm);
        Bitmap APKicon = ((BitmapDrawable) icon).getBitmap();
        return APKicon;
    }
Run Code Online (Sandbox Code Playgroud)

在哪里,pm

PackageManager pm = getPackageManager();
Run Code Online (Sandbox Code Playgroud)

并且显示的错误LogCat

Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我.

android bitmap classcastexception nine-patch

11
推荐指数
1
解决办法
9134
查看次数

如何检测在Java 8中导致ClassCastException的模糊方法调用?

我们目前正在将应用程序从Java 7迁移到Java 8.在修复了一些编译问题之后,我偶然发现了类似于以下问题的问题:ClassCast错误:Java 7与Java 8.

总而言之,这是一个显示问题的示例代码:

public class Test {
    public static void main(String[] args) {
        System.out.println(String.valueOf(getVal("xxx"))); // 7: prints the result, 8: Exception 
    }

    @SuppressWarnings("unchecked")
    public static <T> T getVal(String param) {
        // do some computation based on param...
        return (T) result; // actual return type only depends on param so the caller knows what to expect
    }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是,我们会强调调用者知道预期的类型,这将避免他明确的演员(我不认为这是一个好主意......).在很多情况下,调用者只是期望一个,Object所以根本就没有隐式转换.

如上面的问题中所述,该String.valueOf示例在Java 7中运行良好,因为没有类型推断,因此Object被假设.现在在Java 8中,编译器选择最具体的类型(此处char[]),这会导致ClastCastException运行时.

问题是我们有大约350次调用此getVal …

java generics overloading classcastexception java-8

11
推荐指数
1
解决办法
437
查看次数

使用 Java 8 和 Java 11 时如何修复“类 java.util.LinkedHashMap 无法转换为类”的问题

我正在使用使用 Java 11 构建的微服务,该服务具有在 Java 8 中构建的依赖项。依赖项中有 rest-clients,并且有一种方法可以执行此操作:

    public <T> ResponseEntity<my.company.Wrapper<T>> getForList(String url, HttpHeaders headers) {
        try {
            return template.exchange(url, GET, new HttpEntity<>(headers), new ParameterizedTypeReference<Wrapper<T>>() { });
        } catch (RestClientException restEx) {
            logger.error("RestClientException!, restEx: {}", restEx);
            throw restEx;
        }
    }
Run Code Online (Sandbox Code Playgroud)

休息调用刚刚成功, response -> <200,Wrapper [ elements = [{id=dbfc2557-1738-45e4-8ecd-235d35158957, .....

然后,在微服务(使用 Java 11)中,当它使用 java Stream 时有一点:

        var found = enttsResponse.stream()
                .map(MyCompanyResponse::getId)
                .collect( toList() );
Run Code Online (Sandbox Code Playgroud)

异常消息是:

java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.mycompany.commons.v2.entitlement.MyCompanyResponse (java.util.LinkedHashMap is in module java.base of loader …
Run Code Online (Sandbox Code Playgroud)

java classcastexception java-8 java-11

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

java.lang.ClassCastException:java.lang.Class无法使用retrofit2转换为java.lang.reflect.ParameterizedType

我有这个代码:

    val profile: UserProfile = userApi.profile()


    @GET("users/profile")
    suspend fun profile(): UserProfile
Run Code Online (Sandbox Code Playgroud)

当我运行 userApi.profile() 时,我收到此错误:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
                                                                                                        
Run Code Online (Sandbox Code Playgroud)

详细信息:我更新了 gradle、一些库、kotlin 版本和 android studio。该代码在更新之前曾经有效。后端方面没有任何变化。

更新:看起来所有 api 调用都会发生这种情况,而不仅仅是这个。

retrofitVersion = 2.9.0
kotlinVersion = 1.8.10
gradle = 8.0
Run Code Online (Sandbox Code Playgroud)

android classcastexception android-gradle-plugin retrofit2 android-r8

11
推荐指数
2
解决办法
4265
查看次数

如何禁用AlertDialog内的按钮?

我想AlertDialog用3个按钮写一个.如果不满足某个条件,我希望禁用中间的中性按钮.

int playerint = settings.getPlayerInt();
int monsterint = settings.getMonsterInt();



        AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
        alertbox.setMessage("You have Encountered a Monster");

        alertbox.setPositiveButton("Fight!",
                new DialogInterface.OnClickListener() {

                    // do something when the button is clicked
                    public void onClick(DialogInterface arg0, int arg1) {
                        createMonster();
                        fight();

                    }
                });

        alertbox.setNeutralButton("Try to Outwit",
                new DialogInterface.OnClickListener() {

                    // do something when the button is clicked
                    public void onClick(DialogInterface arg0, int arg1) {
                        // This should not be static
//                      createTrivia();
                        trivia();

                    }
                });

        // Return to …
Run Code Online (Sandbox Code Playgroud)

java android classcastexception android-alertdialog

10
推荐指数
3
解决办法
1万
查看次数

反射IllegalArgumentException导致

更新 - 使问题更清楚.

在通过反射调用方法时获取ClassCastException的可能原因是什么?

在尝试通过反射调用方法时,我将以下stacktrace作为我的应用程序的一部分.

java.lang.IllegalArgumentException: java.lang.ClassCastException@21fea1fv
    at sun.reflect.GeneratedMethodAccessor332.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com..... 
    (remaining is my method stack trace)
Run Code Online (Sandbox Code Playgroud)

我尝试了一个示例类,并将不同类型的各种参数传递给它,但我总是得到一个这个例外.

java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
Run Code Online (Sandbox Code Playgroud)

更新 - 这是我为尝试重新创建异常而编写的示例代码

用于创建代理类的接口

package my.tests;

public interface ReflectionsInterface { 
    public abstract void doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这是测试类

package my.tests;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Reflections implements ReflectionsInterface {

    public static void main(String[] args) {
        Reflections reflections = new Reflections();
        ReflectionsInterface reflectionsProxy = …
Run Code Online (Sandbox Code Playgroud)

java reflection classcastexception illegalargumentexception

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