Groovy07_Groovy动态语言
Posted 李樟清
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy07_Groovy动态语言相关的知识,希望对你有一定的参考价值。
动态类型语言中的类型是在运行时判断的,方法以及其实参也是在运行时检查的。
在使用过程中不会执行类型检查,可以通过TypeChecked开启类型检查。
同时由于使用动态节点调用,损耗性能,可以使用CompileStatic开启静态编译。
1. 和java的差异
groovy
def i = new File("")
println i.getParent()
java
public class lsn_7_0
public static void main(String[] args)
Object file = new File("");
file.getParent();
没运行的情况下,groovy 没报错,java代码报红了,这就是groovy的动态性
2. @TypeChecked
class Person
def dream()
class Zeking extends Person
def dream()
@TypeChecked // 检查调用的时候没出错,虽然可以检查,但是会牺牲掉groovy这个语言的动态性
class Test
@TypeChecked(TypeCheckingMode.SKIP) // 跳过 不检查
void func(Person person)
person.dream()
def test = new Test()
test.func(new Zeking()) // Zeking dream..
test.func(new Person()) // Person dream..
//test.func('') // 报错
void func2(person)
if(person.respondsTo('dream')) // 判断是否实现了dream方法
person.dream()
println new Zeking().hasProperty('name') // 看有没有name的属性 --> null
func2('')
3. 性能对比@CompileStatic
def start = System.nanoTime()
for(i in 0..10000000)
def end = System.nanoTime()
println ((end - start)/1.0e9) //0.026931463 秒
@CompileStatic // 编译静态,关闭groovy动态性
class Test3
static void main(args)
def start = System.nanoTime()
// for(i in 0..10000000)
//
//
for (int i = 0 ; i < 10000000 ; i++)
def end = System.nanoTime()
println ((end - start)/1.0e9) // 不使用CompileStatic :0.00736590
// 使用CompileStatic: 0.003350236 有提升,还是比不上ava,差距不大
// grovvy 的类 都实现GroovyObject接口,
public class lsn_7_0
public static void main(String[] args)
long start = System.nanoTime();
for (int i = 0 ; i < 10000000 ; i++)
long end = System.nanoTime();
System.out.println(((end - start)/1.0e9)); // 0.002163498秒
// java比groovy快,因为groovy的动态性,需要动态的找一个个节点,会牺牲掉他的一部分性能
以上是关于Groovy07_Groovy动态语言的主要内容,如果未能解决你的问题,请参考以下文章
GroovyGroovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
GroovyGroovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )
GroovyGroovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )