繁体   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