6.9 Extension Method扩展

    JFinal Template Engine 默认已经为String、Integer、Long、Float、Double、Short、Byte 这七个基本的 java 类型,添加了toInt()、toLong()、toFloat()、toDouble()、toBoolean()、toShort()、toByte() 七个extension method。以下是使用示例:

    上例第一行代码中的age为String类型,由于String被添加了toInt()扩展方法,所以调用其toInt()方法后便可与后面的Integer型的值18进行比较运算。

    如上面代码所示,由于是对Integer进行扩展,所以上述三个扩展方法中的第一个参数必须是Integer类型,以便调用该方法时让这个参数承载调用者自身。其它参数可以是任意类型,例如上述power方法中的exponent参数。扩展方法至少要有一个参数。以下代码是对上述扩展方法进行配置:

    上述代码第一个参数Integer是被扩展的类,第二个参数MyIntegerExt是扩展类,通过上面简单的两步,即可在模板中使用:

    如上例所示,extension method可以在类自身以外的地方对其功能进行扩展,在模板中使用时的书写也变得非常方便。

    Extension Method 的另一个重要的应用场景,是将不确定类型变得确定,例如Controller.keepPara()方法会将所有参数当成String的类型来keep住,所以表单中的Integer类型在keepPara()后变成了String型,引发模板中的类型不正确异常,以下是解决方案: