- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取依赖于其他 class2 的 class1 的所有公共(public)方法的名称(void 返回类型且无参数)。我正在通过 UrlClassLoader 加载类。现在,当我调用 getDeclaredMethods 时,它会抛出由 ClassNotFoundException 引起的 NoClassDefFoundError 。
我有 3 个 mvn 模块
整个模块结构如下: Project Structure
ClassLoadingTest
|----- Module1
| |--- pom.xml
| |--- src/main/java/
| | |--- com.classloadingtest.module1
| | |
| | |--- Module1Class1.java
| | |--- Module1Class2.java
|
|----- Module2
| |--- pom.xml
| |--- src/main/java/
| | |--- com.classloadingtest.module2
| | |
| | |--- Module2Class.java
|
|----- SampleClassLoader
| |--- pom.xml
| |--- src/main/java/
| | |--- com.classloadingtest.sampleClassLoader
| | |
| | |--- SampleClassLoader.java
Module1Class1.java
public class Module1Class1 {
public void claas1Fun() {
Module2Class module2ClassObj = new Module2Class();
module2ClassObj.module2Fun();
}
}
Module1Class2.java
public class Module1Class2 {
public void class2Fun(){
try {
Module2Class module2ClassObj = new Module2Class();
module2ClassObj.module2Fun();
} catch(Exception e ){
}
}
}
Module2Class.java
public class Module2Class {
public void module2Fun(){
}
}
SampleClassLoader.java
public class SampleClassLoader {
public static void main(String[] args) {
try {
URL mainSourceClassPathURL = new URL("file:" + System.getProperty("user.dir") + "/ClassLoadingTest/Module1/target/classes/");
URL[] urls = { mainSourceClassPathURL};
ClassLoader classLoader = URLClassLoader.newInstance(urls);
Class<?> testCaseClass = classLoader.loadClass("com.classloadingtest.module1.Module1Class1");
Method method[] = testCaseClass.getDeclaredMethods();
for (int i = 0 ; i < method.length ; i++) {
System.out.println(method[i].getName());
}
} catch (Exception e){
e.printStackTrace();
}
}
}
现在,运行类 Module1Class1
的 SampleClassLoader 时会打印
claas1Fun
但是当运行类 Module1Class2
时,它给出的 NoClassDefFoundError 为:
Exception in thread "main" java.lang.NoClassDefFoundError: com/classloadingtest/module2/Module2Class
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at com.classloadingtest.sampleClassLoader.SampleClassLoader.main(SampleClassLoader.java:26)
Caused by: java.lang.ClassNotFoundException: com.classloadingtest.module2.Module2Class
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more
我有两个问题:
try catch
时,为什么会报错?classLoader.loadClass
处加载,那么为什么 getDeclaredMethods
方法需要加载依赖类? 最佳答案
关于try-catch问题,重点是java.lang.NoClassDefFoundError
不是一个Exception
,而是一个Error
,它是一种更严重的Throwable
。
一般来说,错误是不可恢复的(例如 OutOfMemoryError 或 StackOverflowError,...),因此很少会被捕获。
如果你想捕获 NoClassDefFoundError
你应该添加 catch(NoClassDefFoundError e)
到你的 try
关于java - Class.getDeclaredMethods 对于没有参数和 void 返回类型的类方法抛出 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58026750/
我有一个简单的问题。我想在 getDeclaredMethod() 中获取 String.TYPE 作为 parameterType,但我找不到它。例如,有 Long。 TYPE 用于长数据类型,但对
我想编写一个通过 rpc 进行通信的客户端服务器应用程序。该代码对于不带参数的函数运行得很好。但是,当我尝试使用单个参数调用函数(不支持更多参数)时,它会给我一个“NoSuchMethodExcept
我有两个对象,我可能需要调用方法,但我不知道它属于哪一个。现在,我的基本工作流程是这样的: Method method = null; Target target = null; try {
我有一个私有(private)方法,标题是: private fun setNumericListener(editText: EditText, onValueChanged:(newValue:
我想使用 getDeclaredMethod() 来查找具有此签名的方法: public void foo(String inArg1, Object... inArgs); 使用这个调用: Clas
我使用以下代码来打印类的方法: for (Method meth : c.getDeclaredMethods()) { System.out.println(" " + shorten(met
我看过一些关于 getDeclaredMethod 的 NoSuchMethodException 的帖子,但我仍然无法摆脱这个问题。 我将问题简单化了,有人可以解决这个问题吗: public cla
我正在使用反射,我注意到意想不到的方法。我完全将范围缩小到这几行重现问题的代码: import java.lang.reflect.Method; import java.util.Arrays; c
我对 kotlin 中的“getDeclaredMethod”有疑问。 我有一个类: class WorksheetFreeField : Serializable { @SerializedName
这个问题已经有答案了: Testing private method using power mock which return list of Integers (4 个回答) 已关闭 8 年前。
我的通用类如下所示: interface X { Output process(Input input); } class Y implements X { Float process(I
我正在使用反射从特定类中获取所有方法。 这个类引用了不在我的类路径中的类,所以我得到一个异常: java.lang.NoClassDefFoundError: 关于这个: Method methods
这是 getDeclaredMethods 发生的奇怪行为,这是场景,一个名为 Entity 的类: public class Entity { private Object reference; /
我的代码有一个小问题 我有两个类 public class A { public A foo(int a) {return new A();} } public class B extend
这个问题在这里已经有了答案: getDeclaredMethods() behaving differently in Java 7 vs. Java 8 (2 个答案) 关闭 7 年前。 考虑下一
我的代码有一个小问题 我有两个类(class) public class A { public A foo(int a) {return new A();} } public class B
所以我正在加载类(class)并且效果很好。然后执行 getDeclaredMethods() 并得到一个 NoClassDefFounfError。我能够在方法内部对其进行跟踪,这是在线的内容。 d
public Method[] getDeclaredMethods() throws SecurityException 具有如下文档。 /** * * Returns an a
我在 A 类中有一个方法: class Parameter { ... } class A { private void call(T object, Parameter... paramet
我一直在尝试在 Java 中使用 Reflection,但结果并不理想。这是我的代码: public class ReflectionTest { public static void mai
我是一名优秀的程序员,十分优秀!