为什么我无法捕获 Groovy 的 MissingMethodException?
Why Can't I catch Groovy's MissingMethodException?
我正在使用我的一种静态方法进行异常处理。我发现了 MissingMethodException(通过反复试验),但是当我编写代码来捕获它时,Grails 2.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)
Why isn't the exception being caught?
您的 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!'
}
}
}
我正在使用我的一种静态方法进行异常处理。我发现了 MissingMethodException(通过反复试验),但是当我编写代码来捕获它时,Grails 2.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)
Why isn't the exception being caught?
您的 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!'
}
}
}