如何捕获 class 中的 MethodNotFoundException 异常?
How to catch the MethodNotFoundException exception inside the class?
假设我们有一个名为 class 的 DynamicClass
:
public class DynamicClass {
public void get(String input) {
System.out.println(input);
}
}
现在,想象一下 DynamicClass
的以下实例化:
DynamicClass clazz = new DynamicClass();
clazz.getName();
clazz.getOther();
当然,调用getName
和getOther
方法会抛出MethodNotFoundException
异常。但是,我很好奇,有没有办法在 DynamicClass
class 中捕获 MethodNotFoundException
异常,即调用 get("Name")
和 get("Other")
而不是由于调用 getName()
和 getOther()
?
而抛出 MethodNotFoundException
异常
为什么不呢?
try{
clazz.getName();
clazz.getOther();
}catch(MethodNotFoundException e){
clazz.get("Name")
}
但其实并不认为这是个好主意...
很好奇。
恐怕,除了在 Java 中使用 try catch 之外别无他法,但如果 Java 是一个 OTF(动态)编译器并且异常机制实际上使用 (if-responds_to?) 预期在 Class 继承的金字塔顶部声明的方法,例如 Java 中的对象,可以在 Dynamic[=33= 上覆盖该方法].
但是Java不使用上面的机制来控制if responds_to?并且发送到对象(class)的消息在编译器的其他地方进行了测试,但不是作为您可以覆盖的方法。
我知道一种叫做 (Magik) 的语言具有上述机制,非常好,它是一个 OTF 编译器。
Magik 中的对象 class 有一个名为 does_not_responds_to() 的方法,每当将消息发送到对象时,都会针对 class 状态和行为进行测试,并且最后提出或更好地说 运行 does_not_responds_to() 方法以防方法名称(消息)无效。
实现 does_not_responds_to 是一个非常巧妙的解决方案? class (DynamicClass) 中的方法在引发异常之前对其进行处理。然而,经过 10 年的 Magik 经验,再也不需要这样做了。
对不起,我的英文不好,希望能解释一下。
参考this answer, it's possible to catch all uncaught Exceptions in Java:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
// TODO
}
});
假设我们有一个名为 class 的 DynamicClass
:
public class DynamicClass {
public void get(String input) {
System.out.println(input);
}
}
现在,想象一下 DynamicClass
的以下实例化:
DynamicClass clazz = new DynamicClass();
clazz.getName();
clazz.getOther();
当然,调用getName
和getOther
方法会抛出MethodNotFoundException
异常。但是,我很好奇,有没有办法在 DynamicClass
class 中捕获 MethodNotFoundException
异常,即调用 get("Name")
和 get("Other")
而不是由于调用 getName()
和 getOther()
?
MethodNotFoundException
异常
为什么不呢?
try{
clazz.getName();
clazz.getOther();
}catch(MethodNotFoundException e){
clazz.get("Name")
}
但其实并不认为这是个好主意...
很好奇。
恐怕,除了在 Java 中使用 try catch 之外别无他法,但如果 Java 是一个 OTF(动态)编译器并且异常机制实际上使用 (if-responds_to?) 预期在 Class 继承的金字塔顶部声明的方法,例如 Java 中的对象,可以在 Dynamic[=33= 上覆盖该方法].
但是Java不使用上面的机制来控制if responds_to?并且发送到对象(class)的消息在编译器的其他地方进行了测试,但不是作为您可以覆盖的方法。
我知道一种叫做 (Magik) 的语言具有上述机制,非常好,它是一个 OTF 编译器。
Magik 中的对象 class 有一个名为 does_not_responds_to() 的方法,每当将消息发送到对象时,都会针对 class 状态和行为进行测试,并且最后提出或更好地说 运行 does_not_responds_to() 方法以防方法名称(消息)无效。
实现 does_not_responds_to 是一个非常巧妙的解决方案? class (DynamicClass) 中的方法在引发异常之前对其进行处理。然而,经过 10 年的 Magik 经验,再也不需要这样做了。
对不起,我的英文不好,希望能解释一下。
参考this answer, it's possible to catch all uncaught Exceptions in Java:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
// TODO
}
});