为什么我不能在我的extreme()调用周围使用一个镜头块?
因此,在Java中,您的竖立装置的第一行是非常的电话呼叫...无条件地调用extreme(),或者明确地调用另外的竖立器。 我需要知道的是,为什么我不能放置一个挡块?
我的细节实例是我有一个模拟课程进行考试。 没有默认的竖立装置,但我希望能够使考试不那么复杂。 我还打算将从竖立器权利中删除的豁免权纳入RuntimeException。
所以,我打算这样做是正确的:
public class MyClassMock extends MyClass {
public MyClassMock() {
try {
super(0);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// Mocked methods
}
但Java抱怨说这不是第一个声明。
我的解决方法:
public class MyClassMock extends MyClass {
public static MyClassMock construct() {
try {
return new MyClassMock();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public MyClassMock() throws Exception {
super(0);
}
// Mocked methods
}
这是最有效的解决方法吗? 为什么Java不允许我以前做过?
我对“为什么”的理想预感是,Java并不打算允许我在一个可能不规则的状态下实际创建一个对象......尽管如此,在进行模拟时,我没有提到这一点。 看来我需要有能力做到这一点......或者至少我认识到上面对于我的实例是安全的......或者看起来好像无论如何都需要。
我绕过了我从被检查类中使用的任何方法,因此没有威胁我正在使用未初始化的变量。
0
Mike Stone 2019-05-13 02:38:54
资源
分享
答案: 3
遗憾的是,编译器无法处理学术概念,并且尽管您可能认识到它在您的实例中是安全的,但如果它们允许,它肯定需要对所有实例都是安全的。
简单地说,编译器不是简单地退出你,而是退出每个人,包括所有那些不认识它是有害的并且还需要特殊交付的人。 对此也有各种其他因素,因为所有语言通常都有办法 有害 如果一个人认识到如何管理它们,那么就要分
在C#中。 NET有类似的规定,并且宣布召唤基础竖立装置的唯一方法是:
public ClassName(...) : base(...)
这样做,基础竖立器肯定会在竖立器的主体之前被调用,而且你也无法改变这个顺序。
0
Lasse Vågsæther Karlsen 2019-05-17 12:22:36
资源
分享