簡體   English   中英

Java-如何在匿名類之外引發異常

[英]Java - How to throw exception outside an anonymous class

try
{
    if(ruleName.equalsIgnoreCase("RuleName"))
    {
        cu.accept(new ASTVisitor()
        {
            public boolean visit(MethodInvocation e)
            {
                if(rule.getConditions().verify(e, env, parentKeys, astParser, file, cu)) // throws ParseException
                    matches.add(getLinesPosition(cu, e));
                return true;
            }
        });
    }
    // ...
}
catch(ParseException e)
{
    throw AnotherException();
}
// ...

我需要在底部catch中捕獲引發的異常,但是我無法通過throws結構重載方法。 怎么辦,請指教? 謝謝

創建自定義異常,在匿名類中編寫try catch塊,然后將其捕獲到您的catch塊中。

class CustomException extends Exception
{
      //Parameterless Constructor
      public CustomException () {}

      //Constructor that accepts a message
      public CustomException (String message)
      {
         super(message);
      }
 }

現在

try
{
    if(ruleName.equalsIgnoreCase("RuleName"))
    {
        cu.accept(new ASTVisitor()
        {
           try {

            public boolean visit(MethodInvocation e)
            {
                if(rule.getConditions().verify(e, env, parentKeys, astParser, file, cu)) // throws ParseException
                    matches.add(getLinesPosition(cu, e));
                return true;
            }

          catch(Exception e){ 
              throw new CustomException(); 
          }
        });
    }
    // ...
}
catch(CustomException e)
{
    throw AnotherException();
}

如已經建議的那樣,可以使用未經檢查的異常。 另一種選擇是突變最終變量。 例如:

final AtomicReference<Exception> exceptionRef = new AtomicReference<>();

SomeInterface anonymous = new SomeInterface() {
    public void doStuff() {
       try {
          doSomethingExceptional();
       } catch (Exception e) {
          exceptionRef.set(e);
       }
    }
};

anonymous.doStuff();

if (exceptionRef.get() != null) {
   throw exceptionRef.get();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM