首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能捕捉Groovy的MissingMethodException呢?

为什么我不能捕捉Groovy的MissingMethodException呢?
EN

Stack Overflow用户
提问于 2018-03-28 16:41:21
回答 1查看 1.2K关注 0票数 0

我正在用我的一种静态方法处理异常。我已经发现了MissingMethodException (通过尝试和错误),但是当我编写代码来捕获它时,Grails2.3.11忽略了catch块。甚至不使用默认异常。为什么不抓住例外呢?

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 16:56:52

为什么不抓住例外呢?

您的catch块只会捕获从try块引发的异常。try块中没有表达式将抛出MissingMethodException,因此不会调用捕获MissingMethodExceptioncatch块。这一切看起来都是按照设计完成的。

如果将DateUtility.getGrailsDefaultDate(1)放在try块中,该块具有与catch块关联的捕获MissingMethodException的块,则将调用该catch块。

试试这个..。

代码语言:javascript
复制
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!'
        }
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49539981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档