一般情况下当我们访问或修改不存在的属性、调用不存在的方法会抛出异常,而在Groovy中则可以通过实现相应的Hook Method钩子方法以避免异常发生
属性缺失
Groovy在MP元编程方面提供了丰富的特性,其中之一就是在访问、修改不存在的属性时,提供了一个钩子方法。下面即是一个简单的Groovy示例,当我们访问、修改Tiger类不存在的属性,即会抛出相应的异常
1 | class MissPropertyDemo { |
测试结果如下所示
而由于Groovy为属性缺失这一场景提供了相应了钩子方法:propertyMissing、$static_propertyMissing。以避免直接抛出相应的异常,示例代码如下所示
1 | class MissPropertyDemo { |
测试结果如下所示,符合预期
方法缺失
当我们调用一个不存在的方式时,即会抛出异常
1 | class MissMethodDemo { |
测试结果如下,符合预期
对于非静态方法而言,我们可以实现methodMissing方法以避免抛出异常。示例代码如下所示
1 | class MissMethodDemo { |
对于静态方法而言,我们可以实现$static_methodMissing方法以避免抛出异常。示例代码如下所示
1 | class MissMethodDemo { |
与此同时,我们还可以通过invokeMethod方法进行动态选择的方法调用,示例代码如下所示
1 | class MissMethodDemo { |
参考文献
- Groovy In Action · 2nd Edition Dierk König、Guillaume Laforge著