我正在用我的一种静态方法处理异常。我已经发现了MissingMethodException (通过尝试和错误),但是当我编写代码来捕获它时,Grails2.3.11忽略了catch块。甚至不使用默认异常。为什么不抓住例外呢?
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)
发布于 2018-03-29 16:56:52
为什么不抓住例外呢?
您的catch块只会捕获从try块引发的异常。try块中没有表达式将抛出MissingMethodException,因此不会调用捕获MissingMethodException的catch块。这一切看起来都是按照设计完成的。
如果将DateUtility.getGrailsDefaultDate(1)放在try块中,该块具有与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!'
}
}
}https://stackoverflow.com/questions/49539981
复制相似问题