我正在进行一项任务,我被告知需要创建一个必须扩展给定类的类(称为ClassB)(称之为ClassA)。唯一的问题是ClassA的构造函数内部的代码可能抛出一个异常,所以当我为ClassB创建构造函数时,我试图围绕对super()的调用包装一个try / catch块,但当然,那个因为超级必须是第一个电话,所以不起作用。
我该如何解决这个问题?
答案 0 :(得分:6)
public ClassB extends ClassA {
public ClassB() throws MyClassAException {
super();
}
}
答案 1 :(得分:1)
您可以在子类构造函数的throws子句中添加异常: -
class ClassA {
ClassA() throws Exception {
}
}
public class Demo extends ClassA {
Demo() throws Exception {
super();
}
public static void main(String[] args) {
try {
Demo d = new Demo(); // Handle exception here.
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
ClassB
应该有一个静态方法
public static ClassB makeClassB() {
try {
return new ClassB();
}
catch(Exception exc) {
// whatever logic you are currently performing to swallow
// presumably you have some default ClassB to return as part of this logic?
}
将使用try / catch包装ClassB
的构造。客户端代码将调用makeClassB()
,ClassB
的构造函数将为private
并抛出。