如何获取抛出自定义异常的类的名称

时间:2013-05-02 16:59:34

标签: java custom-exceptions

我正在为大学准备一个项目,我需要编写一个自定义异常,当它们没有正确初始化时会被同一个包中的几个类抛出。问题是我必须让用户知道哪些类没有正确初始化(并抛出异常)......所以我在考虑这样的事情:

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;
}
}

(顺便说一句,可以通过反思来实现吗?)

6 个答案:

答案 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!");
    }
}