gpt4 book ai didi

java - 如何通过方法调用(ClassCastException)从对象中转换类

转载 作者:行者123 更新时间:2023-11-29 23:57:10 26 4
gpt4 key购买 nike

我有 Main apk 和 Sub apk(实际上 sub apk 是一种库)
并且它们都有相同的 arr 库文件

主应用程序通过 dexclassloader 从子应用程序加载“MyClassInterface”类
因为主应用程序在 Assets 文件夹中有子 apk 文件

“MyClassInterface”类的“getMyClassInstance”方法通过方法调用返回MyClass实例
所以,我想要的是这样的

MyClass myClass = (MyClass) methodGetMyClass.invoke(object);
myClass.getName();

但是这里的 ClassCastExetion 就像下面的日志
不可能吗?或者如果没有,我该如何上课?

System.err java.lang.ClassCastException:com.example.library.MyClass cannot be cast to com.example.libary.MyClass
System.err at com.example.woosuk.mainapplication.MainActivity.onCreate(MainActivity.java:34)
System.err at android.app.Activity.performCreate(Activity.java:7174)
System.err at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
System.err at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
System.err at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
System.err at android.app.ActivityThread.-wrap11(Unknown Source:0)
System.err at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
System.err at android.os.Handler.dispatchMessage(Handler.java:105)
System.err at android.os.Looper.loop(Looper.java:164)
System.err at android.app.ActivityThread.main(ActivityThread.java:6938)
System.err at java.lang.reflect.Method.invoke(Native Method)
System.err at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
System.err at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

--------------------主应用程序------------------------ ----

DexClassLoader dexClassLoader = new DexClassLoader("data/data/com.example.woosuk.mainapplication/sub.apk", "", null, ClassLoader.getSystemClassLoader());
try {
Class<?> _class = dexClassLoader.loadClass("com.example.woosuk.subapplication.MyClassInterface");
Object object = _class.newInstance();

Method methodGetIntValue = _class.getMethod("getIntValue");
Log.e("TEST", "getIntValue return " + methodGetIntValue.invoke(object));//working fine

Method methodGetMyClass = _class.getMethod("getMyClassInstance");
MyClass myClass = (MyClass) methodMyClass.invoke(object);//ClassCastException!!!!!
} catch (Exception e) {
e.printStackTrace();
}

--------------------子应用程序------------------------ ------

public class MyClassInterface {

public MyClass getMyClassInstance() {
return new MyClass(99, "test");
}

public int getIntValue() {
return 99;
}
}

--------------------图书馆的MyClass ----------------

package com.example.library;
public class MyClass {

private int version;
private String name;

public MyClass(int version, String name) {
this.version = version;
this.name = name;
}

public int getVersion() {
return version;
}

public void setVersion(int version) {
this.version = version;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Github : https://github.com/woosuk0410

图书馆:https://github.com/woosuk0410/Library

子应用:https://github.com/woosuk0410/SubApplication

主应用程序:https://github.com/woosuk0410/MainApplication

how to cast class from method invoke by dexclassloader ( ClassCastException ) 相同的问题

最佳答案

因为您没有使用同一个 ClassLoader 来加载这两个类。

请尝试使用 MyClass.class.getClassLoader() 而不是 ClassLoader.getSystemClassLoader()

关于java - 如何通过方法调用(ClassCastException)从对象中转换类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com