我是靠谱客的博主 专注服饰,最近开发中收集的这篇文章主要介绍groovy 学习(二)groovy中的数据结构groovy中的面向对象类,接口的使用元编程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

groovy中的数据结构

groovy中列表的操作

//列表
//def list = new ArrayList(); java中定义列表的方式
def list = [1,2,3,4,5]
//println list.class
//println list.size()

//定义数组的方式
//def array = [1,2,3,4,5] as int[]
//int[] array2 = [1,2,3,4,5]

//对列表进行排序
def sortList = [5,9,3,5,-2]
//Collections.sort(sortList)
Comparator comparator = {
    a,b-> Math.abs(b)>Math.abs(a) ? 1 :  -1  //比较的逻辑和结果是反的???
}
Collections.sort(sortList,comparator)
println  sortList

def strList = ['sd','ddqw','qwefcf','a']
strList.sort{it->return it.size()}

//列表的查找
def findList = [1,6,9,4,11]
//int result = findList.find {
//    return it%2==0
//}
//def result = findList.findAll {
//    return it%2!=0
//}
//def result = findList.min{return Math.abs(it)}
//def result = findList.max{return Math.abs(it)}
//def result = findList.count {return it>10}
//println result

//list的元素添加
findList.add(8)
findList.leftShift(7)
findList<<13
//println findList

//list的删除操作
findList.remove(7)//移除下标的元素
findList.remove((java.lang.Object) 7)//移除元素
println findList

groovy中的映射

map在groovy中的定义

//map的定义
def colors = [red:'ff00000',green:'00ff00',blue:'0000ff']
//map查询
//println colors['red']
//println colors.red
//添加元素
colors.yellow = 'ffff00'
//println colors.toMapString( )

//map的遍历
def stu = [1:[num:'001',name:'boa',score:11],
           2:[num:'002',name:'bob',score:57],
           3:[num:'003',name:'boc',score:89],
           4:[num:'004',name:'bod',score:94]
            ]
stu.each {
    def student->
        println "the key is ${student.key},the value is ${student.value}"
}
//直接遍历key ,value
stu.eachWithIndex{ key,value,index ->
    println "the key is ${key},the value is ${value} index is ${index}"
}

//map中的查找
def entry = stu.find {def student ->return student.value.score>60}
//println  entry

def names = stu.findAll {def student ->return student.value.score>60}.collect {return it.value.name}
//println names

//map的排序
def sort = stu.sort {def stu1,def stu2 ->
    Number score1 = stu1.value.score
    Number score2 = stu2.value.score
    return score1 == score2 ? 0 :score1<score2? -1: 1
}
println  sort

groovy中的范围

//定义范围
def range = 1..10

println range[0]//获取范围中的元素,取第一个数
println range.contains(7)//判断是否包含某个元素
println range.from//起始值
println range.to//中止值
//遍历
range.each {
    println it
}
//范围的应用
def getGrade(Number number) {
    def result
    switch (number) {
        case 0..60:
            result = "不及格"
            break
        case 61..100:
            result = "及格"
            break
    }
    println result
}
getGrade(71)

groovy中的面向对象类,接口的使用

创建 new Groovy Class

// 默认为class
// 默认继承groovyObject类
class Person {
    String name;

    Integer age;

    def increaseAge(Integer year){
        age += year;
    }

}

创建groovy的脚本 groovy script类型 objectstu
操作对象的属性和方法

Person person = new Person(name: 'david',age: 22)
println "person's name is ${person.name} .person's age is ${person.age}"
person.increaseAge(12)
person.play()
person.eat()

创建groovy中的接口

 //接口中的方法只能是public
interface Action {
    def eat()
    def drink()
    def play()
}

Trait类似Interface,可以定义默认的实现方法,java8中也能配置接口默认实现方法

trait DefaultAction {
    abstract void eat()
    void play(){
        println "play"
    }
}

元编程

groovy中方法的调用顺序如图

println person.cry()

会报错groovy.lang.MissingMethodException: No signature of method
重写Person类中的invokeMethod方法

/**
 * 一个方法寻找不到调用此方法
 */
    @Override
    Object invokeMethod(String s, Object o) {
        return "method name is ${s},param is ${o}"
    }

再次运行程序打印方法名称和参数
同理也可以重写methodMissing方法

def methodMissing(String name,Object args){
    return "method2 name is ${name},param is ${args}"
}

metaClass的使用

为类动态新增一个属性 
Person.metaClass.sex = 'male'
Person p1 = new Person(name: 'jane',age: 23)
println p1.sex
//为类动态生成方法
Person.metaClass.upper = {->sex.toUpperCase()}
println p1.upper()
//生成静态方法
Person.metaClass.static.createPerson={String name,Integer age->new Person(name:name,age:age)}
Person p2 =  Person.createPerson("test",3)
println p2.name+" and "+p2.getAge()

如果想要注入的方法或者属性全局可用
在外部的注入方法前添加
ExpandMetaClass.enableGlobally()

最后

以上就是专注服饰为你收集整理的groovy 学习(二)groovy中的数据结构groovy中的面向对象类,接口的使用元编程的全部内容,希望文章能够帮你解决groovy 学习(二)groovy中的数据结构groovy中的面向对象类,接口的使用元编程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部