动态类型语言中的类型是在运行时推断的方法及其参数也在运行时接受检查的。
一、Java中的类型
略(介绍Java类型(贬))
二、动态类型
略(介绍动态类型(褒))
三、动态类型不等于弱类型
如题(groovy属于动态强类型,Java属于静态强类型)
四、能力式设计
能力式设计(Design of Capability)在此处是指,忽略其特定类型,只要其有这种能力,即可使用其功能(Method),只使用其能力。
groovy这一动态语言支持能力式设计,但是在使用时需要自律:必须确保方法名的大小写的正确性;需要自身做单元测试,检查类型正确性;使用groovy中的responseTo方法检查对象的能力(有没有方法的具体实现)。
类:
class Man {
void helpMoveThings() {
println "Man's helping"
}
}
类:
class Woman {
void helpMoveThings() {
println "Woman's helping"
}
}
class Elephant {
void helpMoveThings() {
println "Elephant's helping"
}
void eatSugarcane() {
println "Elephant's eating"
}
}
方法定义:
def takeHelp(helper) {
helper.helpMoveThings()//每个类都有方法实现
if(helper.metaClass.respondsTo(helper,"eatSugarcane")) {
helper.eatSugarcane()//某些类有实现
}
}
结果:
Man's helping
Woman's helping
Elephant's helping
Elephant's eating
五、可选类型
groovy既是动态类型,也是可选类型(def 和 int double 类 等都能用(我理解的)),基于JVM的语言,以来Java库,会做强制类型转换。
六、多方法
如果一个类有多个重载的方法,Groovy会聪明地选择一个正确的实现——不仅基于目标对象(调用方法的对象),而且会基于所提供的参数。这种方法分派机制基于多个实体——目标及参数,所以被称作多份派或者多方法。
七、动态还是非动态
略(一些编程建议)
八、关闭动态类型的两种类型
(一)、静态类型检查
使用注解@TypeChecked,则Groovy会严格检查目标代码,防止出错。利用该注解时,必须指明方法和闭包的形参参数类型。
(二)、静态编译
使用注解@CompileStatic可以让Groovy执行静态编译,这样生成的字节码与Java代码会很类似,效率更高。
《完》