gpt4 book ai didi

java - 在java中读取.class文件

转载 作者:行者123 更新时间:2023-11-29 03:57:33 24 4
gpt4 key购买 nike

嗨,谁能指导我解决这个问题?

我正在使用 Java 反射 读取一个 .class 文件,该类包含一些其他类引用(外部引用)。但是当我尝试使用 Java 反射访问/读取它的信息时,它会给出

Cannot Find Symbol compile time error?

在读取 .class 文件的情况下,是否有任何方法可以使用 Java 反射获取类的自定义数据类型(意味着 A 类获得了 B 类的引用)?

  1. 我正在使用 ClassLoader 读取 .class 文件
  2. 然后我读取文件,然后将其传输到字节数组,并使用defineCalss() 方法我将获得类对象。
  3. 在我获得信息后,即我使用 getDeclaredFields() 方法的类的所有字段。

当我尝试编译具有外部引用的 .java 文件时,它给出了“找不到符号错误”& 当我使用一些 IDE 编译它时,即 eclipse 然后尝试打开它的 .class 文件来读取它然后它给出了这些错误

线程“main”中的异常 java.lang.NoClassDefFoundError: LTeacherClass; 在 java.lang.Class.getDeclaredFields0( native 方法) 在 java.lang.Class.privateGetDeclaredFields(未知来源) 在 java.lang.Class.getDeclaredFields(未知来源) 在 ClassExtractManager.classInfoExtracter(ClassExtractManager.java:158) 在 MainClass.main(MainClass.java:36)引起:java.lang.ClassNotFoundException: TeacherClass 在 java.lang.ClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) ... 还有 5 个

如果还有问题,我会贴出代码。

最佳答案

反射是一种运行时 API,我认为它不会给您带来编译时错误。您的代码很可能存在问题,例如未声明/未导入的类或变量。

我看到了两种可能性。

如果您正在编写自己的类加载器或任何其他确实需要在运行时动态加载类的解决方案,则不能在编译时将其与对具体类或未知(未导入)接口(interface)的引用混为一谈。您必须从头到尾依赖反射,或转换为已知类型(或者更可能是接口(interface),但这些必须在编译时为编译器所知)。

另一种可能性是您完全误用了反射或类加载。我怀疑您可能有读取 .class 文件的代码,然后尝试按名称使用该类,假设它可以正常工作,就好像所有内容都已被解释一样。那将意味着您搞乱了编译并与执行链接。粗略地说,编译器只会将诸如 TeacherClass 之类的符号翻译成相关代码(因此它提示说它不知道 TeacherClass 是什么)。当您实际执行代码时,会在编译后使用反射。这就是它不影响编译器的原因。

也许您根本不需要这些?也许您只需要学习 Java 类路径、编译和链接的基础知识?

这一切都只是基于所提供的稀缺信息的猜测。

关于java - 在java中读取.class文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455858/

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