gpt4 book ai didi

Java 反射 - 找不到 Android 类

转载 作者:行者123 更新时间:2023-11-30 10:08:20 25 4
gpt4 key购买 nike

我正在尝试运行反射来检查 Java 中是否存在某些 android 类(例如 Toast)。我正在使用以下代码从我的命令行运行它:

String [] packages = new String[] {"java.lang.",
"android.widget.",
"android.util.",
"android.app.",
"android.view.",
"android.content."};
for (int i = 0; i < packages.length; i++){
String package_name = packages[i];
try {
Class<?> clazz = Class.forName(package_name + "Toast");
System.out.println("class Exists");
return clazz;
}
catch (ClassNotFoundException e){
System.out.println("class " + package_name + "Toast doesnt exists");
}
}

但是,我得到了输出:类 android.widget.Toast 不存在(但我知道它确实存在,这是类所在的位置)有什么想法吗?


编辑:我正在尝试编写一个 Java 类,它不是从 Android Studios 运行,而是使用 cmd 行中的 javac 编译和运行。

最佳答案

因为您是在命令行上执行此操作,所以没有理由让 Android 包/类在运行时可用,除非明确包含它。您的程序的输出是有意义的 - 除非您向程序提供正确的 Android 库,否则当您尝试解析特定的 Android 类(例如 Toast)时将不会有匹配项。

答案本质上是有效地使用 Java 的类路径。默认情况下,在不声明参数的情况下,它是工作目录“.”。

使用 -classpath 作为参数添加到它。天真地编译:

javac YourReflectionTest.java

如您所知,该程序找不到匹配项。

如果这样做,javac 也会成功

javac -classpath ".;/opt/android-sdk/platforms/android-21/android.jar" YourReflectionTest.java

如果你运行程序,并尝试

java YourReflectionTest

它仍然会产生相同的结果。为什么?在运行时,仍然没有加载 Android 类。默认情况下,您只会获得 JDK 安装中包含的 Java 系统库。

但是,如果您在运行时提供了适当的路径,那么所有的魔法都会突然发生:

java -classpath ".;/opt/android-sdk/platforms/android-21/android.jar" YourReflectionTest

请注意,Android API 级别 21 在这里只是一个示例,可以根据您要测试的功能使用任何级别。

关于Java 反射 - 找不到 Android 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782978/

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