我有一种方法,在某些情况下可能会抛出异常,但大部分时间都不会。我想要求任何调用此方法的人如果在" dangerous"条件,但不必担心它在" safe"条件。
public static boolean dangerousSituation; // set somewhere else
public sometimesDangerousMethod() throws MyException {
// some code
// may throw MyException if dangerousSituation == true
// will never throw MyException if dangerousSituation == false
}
otherMethod() {
dangerousSituation = false;
sometimesDangerousMethod(); // shouldn't have to worry about MyException
// if it can't possibly happen
dangerousSituation = true;
try {
sometimesDangerousMethod(); // should be required to handle
// MyException if it may possibly happen
} catch(MyException e) {
// handle MyException
}
}
也就是说,当有且仅当dangerousSituation == true时,我想要有时候在一个尝试/捕获块有时候危险的方法()。
我之所以这样做是因为如果他们坚持安全的情况,我不想打扰开发人员进行异常处理。但是,当然,如果开发人员确实使用危险情况,编译器应该让他知道。
有没有办法在Java中获得此行为?
我曾考虑将有时危险的方法()分解为两种方法:一种是危险的,一种是安全的。但我不认为这是有道理的,因为这需要开发人员了解两种基本相同的方法。
答案 0 :(得分:2)
您正在寻找的功能不存在。您可以将其拆分为两种方法,或者您的同事必须使用try-catch。对不起,但有时答案只是“不”。
答案 1 :(得分:2)
@mypetlion在很大程度上是准确的。 您还需要考虑以下几个选项:
是否可以在sometimesDangerousMethod()
而不是otherMethod()
内处理异常?如果是这样,那么您可以将日志记录/度量标准对象传递给方法内部的方法try/catch
,并在发生此情况时记录错误消息或更新度量标准。这样,在没有发生异常的情况下,您不必担心try/catch
。
您可以将其分解为2个方法,例如提到的@mypetlion和一些组织,它可能是足够好的代码:
`
public class Solution {
public static boolean dangerousSituation; // set somewhere else
public void notDangerousMethod(){
// will never throw MyException
}
public void dangerousMethod() throws MyException {
// throws MyException
}
public void sometimesDangerousMethod() throws MyException {
if(dangerousSituation){
dangerousMethod();
} else {
notDangerousMethod();
}
}
public void otherMethod() {
dangerousSituation = false;
// Option 1:
if(dangerousSituation){
try{
dangerousMethod();
} catch(MyException e) {
// handle MyException
}
} else {
notDangerousMethod();
}
// Option 2:
try {
sometimesDangerousMethod(); // should be required to handle
// MyException if it may possibly happen
} catch(MyException e) {
// handle MyException
}
}
`
根据SometimesDangerousMethod()的内容,这可能有点矫枉过正。如果它是一些非常简单的逻辑线,那么实现原始设计可能是值得的。我不认为开发人员会介意:)
答案 2 :(得分:0)
你错过了Exception这个词。您的代码不应抛出Exception
,除非存在异常情况。正确设计的代码消耗您的代码仍然需要处理异常情况的可能性。
答案 3 :(得分:0)
您不必担心方法的用户不必担心例外情况。
如果您的方法因任何原因而失败,它应该声明异常(或使用未经检查的异常)并在异常失败时抛出异常。这正是例外情况。
所以我认为dangerousSituation
实际上是一个非常危险的旗帜。在你提出的代码中,设置标志转换为“不要告诉我方法是否失败[因为我知道比方法的实现更好,不会有失败]”。
因此,不投掷的唯一原因可能是肯定会成功的方法。任何体面的Java开发人员都应该知道如何处理异常(通常是让它们传递到顶级,捕获并记录所有异常)。