簡體   English   中英

為什么我無法捕獲Groovy的MissingMethodException?

[英]Why Can't I catch Groovy's MissingMethodException?

我正在使用一種靜態方法進行異常處理。 我已經發現了MissingMethodException(通過反復試驗),但是當我編寫代碼來捕獲它時,Grails 2.3.11忽略了catch塊。 甚至沒有使用默認的Exception。 為什么沒有捕獲到異常?

package utility

import java.text.SimpleDateFormat

class DateUtility {

    static String getGrailsDefaultDate(String datetm) {
        def format = new SimpleDateFormat("YYYYMMddHHmmss")
        try{
            def date = format.parse(datetm)
            date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(date)
            datetm = date.toString()
        }
        catch(IllegalArgumentException iae){
            datetm = "An error occured retrieving the date"
        }

        catch(NullPointerException npe){
            datetm = "A date was not provided"
        }
        catch(java.text.ParseException pe){
            datetm = "Unparseable date"
        }
        catch(groovy.lang.MissingMethodException mme){
            datetm = "A missing method occured"
        }
        catch(Exception e){
            datetm = "default exception"
        }

        return datetm
    }

}

這是應該引發缺少的方法異常的調用:

DateUtility.getGrailsDefaultDate(1)

為什么沒有捕獲到異常?

您的catch塊將僅捕獲從try塊引發的異常。 try塊中沒有會引發MissingMethodException表達式,因此捕獲MissingMethodException catch塊將不會被調用。 這一切看起來都按設計工作。

如果將DateUtility.getGrailsDefaultDate(1)放在一個try塊中,該try塊具有與catch塊相關聯的catch塊,該catch塊會捕獲MissingMethodException ,那么將調用該catch塊。

嘗試這個...

class DateUtility {

    static String getGrailsDefaultDate(String datetm) {
        def format = new SimpleDateFormat("YYYYMMddHHmmss")
        try{
            def date = format.parse(datetm)
            date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(date)
            datetm = date.toString()
        }
        catch(IllegalArgumentException iae){
            datetm = "An error occured retrieving the date"
        }

        catch(NullPointerException npe){
            datetm = "A date was not provided"
        }
        catch(java.text.ParseException pe){
            datetm = "Unparseable date"
        }
        catch(groovy.lang.MissingMethodException mme){
            datetm = "A missing method occured"
        }
        catch(Exception e){
            datetm = "default exception"
        }

        return datetm
    }

    static void main(args) {
        try {
            DateUtility.getGrailsDefaultDate(1)
        } catch (MissingMethodException mme) {
            println 'I Caught The Exception!'
        }
    }

}

暫無
暫無

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

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