如果我的类已经扩展了其他类,如果我希望将我的类的实例作为Exception对象抛出,我该怎么办?
我发现的唯一方法是某些超类必须扩展Exception类。还有其他方法吗? 编辑:这也表明设计缺陷,如果是,那么请解释如何 在您的课程中使用自定义异常的正确方法是什么,是通过在您的课程中添加自定义Exception的引用还是在需要时调用“new”,您能给出代码大纲吗?
答案 0 :(得分:3)
你必须将它包装在另一个类中。在java中,你只能抛出Throwable的子类型,这是一个类。
示例:
public class Wrapper extends Exception {
public final MyClass wrapped;
public Wrapper(MyClass toWrap) { wrapped = toWrap; }
}
如果这是trampoline技术的应用或类似的控制流技术,那么不可以获得堆栈跟踪(减少创建对象所需的时间) )。如果需要,我可以查一查。
答案 1 :(得分:2)
一个出路可能是使用泛型定义您的类以将Exception作为参数。通过这种方式,你可以让别人觉得在某种意义上这是例外。
public class One{}
public class Two<E extends Exception> extends One {
E e = null;
public void throwE() throws E {
throw e;
}
}
PS注意:我已经假设您知道这是不可能的,因为您必须为此目的扩展Exception类
答案 2 :(得分:1)
如果您可以修改所扩展的课程,那么该课程应该延伸Exception
或RuntimeException
。
否则,你无法做到这一点。
答案 3 :(得分:1)
Java允许单继承,因此您只能扩展Exception
/ Throwable
或其他类。没有其他方法可以让类表现得像异常一样。当然,您仍然可以实现任意数量的接口。
话虽如此,你想抛出已经是其他类的子类的东西,这很奇怪。您是否尝试通过抛出异常并稍后捕获它来传输一些数据?使用异常控制程序流是一个很大的反模式。
答案 4 :(得分:0)
是的,就是这样,你只能抛出Throwable
个班级。 Throwable
是一个具体的类,而不是一个接口,所以你必须修改你的对象层次结构来实现你想要的。
答案 5 :(得分:0)
你必须扩展java.lang.Throwable
才能抛出和实例。您可以直接或从任何非最终子类扩展它,通常是java.lang.RuntimeException
或java.lang.Exception
。
您需要重新考虑围绕此约束进行设计。