我正在为大学准备一个项目,我需要编写一个自定义异常,当它们没有正确初始化时会被同一个包中的几个类抛出。问题是我必须让用户知道哪些类没有正确初始化(并抛出异常)......所以我在考虑这样的事情:
class InitializationException extends Exception {
private static final String DEFAULT_MSG =
"This " + CLASSNAME-THROWINGME + " had not been initialized properly!";
protected String msg;
InitializationException() {
this.msg = DEFAULT_MSG;
}
InitializationException(String msg) {
this.msg = msg;
}
}
(顺便说一句,可以通过反思来实现吗?)
答案 0 :(得分:5)
看看Throwable.getStackTrace()
。每个StackTraceElement
都有getClassName()
。您可以查看元素[0]
以确定异常的起源。
答案 1 :(得分:1)
类似的东西:
StackTraceElement[] trace = theException.getStackTrace();
String className = trace[0].getClassName();
(虽然我不太确定你是想要第一个元素还是最后一个元素。)
(并注意你可以创建一个Throwable并在其上执行getStackTrace(),而不会抛出它,以找出谁叫你(这将是跟踪元素1)。)
答案 2 :(得分:1)
我只是将throw类传递给构造函数,如下所示:
public class InitializationException extends Exception {
public InitializationException(Class<?> throwingClass) { ... }
...
}
答案 3 :(得分:1)
class InitializationException extends Exception {
private final String classname;
InitializationException(String msg, Object origin) {
super(msg);
this.classname = origin != null ? origin.getClass().toString() : null;
}
public String getClassname() {
return this.classname;
}
}
。 。 。 。 抛出新的InitializationException(“出错了”,这个);
答案 4 :(得分:0)
它是一种解决方法:
你可以在构造函数中传递类名,比如
throw new InitializationException(getClass().getName());
或者可以像
一样打电话给班级throw new InitializationException(this);
并在你的excpetin类中处理名称提取
InitializationExcpetion(Object context){
this.name = getClass().getName()
}
答案 5 :(得分:0)
答案是强制类抛出异常来告诉异常它是哪个类:
public class InitializationException extends Exception {
public InitializationException(Class<?> c) {
super( "The class " + c.getName()+ " had not been initialized properly!");
}
}