我是靠谱客的博主 坦率星星,最近开发中收集的这篇文章主要介绍Groovy的Bean对象,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

get 和set函数

groovy中所有类成员编译后会自动生成get set 函数

class Person{
    def name
    def age
    def high
    def sex
}

在编译后会自动生成getset函数(其他生成函数请无视,这是元编程内容)。

public class Person implements GroovyObject {
    private Object name;
    private Object age;
    private Object high;
    private Object sex;

    public Person() {
        CallSite[] var1 = $getCallSiteArray();
        MetaClass var2 = this.$getStaticMetaClass();
        this.metaClass = var2;
    }

    static {
        __$swapInit();
        Long var0 = 0L;
        __timeStamp__239_neverHappen1589035397337 = var0;
        Long var1 = 1589035397337L;
        __timeStamp = var1;
    }

    public Object getName() {
        return this.name;
    }

    public void setName(Object var1) {
        this.name = var1;
    }

    public Object getAge() {
        return this.age;
    }

    public void setAge(Object var1) {
        this.age = var1;
    }

    public Object getHigh() {
        return this.high;
    }

    public void setHigh(Object var1) {
        this.high = var1;
    }

    public Object getSex() {
        return this.sex;
    }

    public void setSex(Object var1) {
        this.sex = var1;
    }
}

外部访问属性是隐式的通过get,set函数。

class Person {
    def name
    def age
    def high
    def sex

    def setName(name) {
        println "Invoke setName function"
        this.name = name
    }

    def getName() {
        println "Invoke getName function"
        return name
    }
}


Person person = new Person()

person.name = "XiaoMing"

println person.name

输出

Invoke setName function
Invoke getName function
XiaoMing

问题来了,如何不通过getset函数访问属性?通过@属性语法

class Person {
    def name
    def age
    def high
    def sex

    def setName(name) {
        println "Invoke setName function"
        this.name = name
    }

    def getName() {
        println "Invoke getName function"
        return name
    }
}


Person person = new Person()

person.@name = "XiaoMing"

println person.@name

输出:

XiaoMing
  • 注意:
    类内部默认不通过getset访问自身属性
class Person {
    def name
    def age
    def high
    def sex

    def setName(name) {
        println "Invoke setName function"
        this.name = name
    }

    def getName() {
        println "Invoke getName function"
        return name
    }

    def test() {

        name="XiaoMing"
        println "My name is $name"
    }
}



new Person().test()

输出

My name is XiaoMing

够敏捷的构造函数

Groovy如果Bean存在无参构造,那么可以在创建对象的时候传入一个map,为属性名,为赋值结果。

class Person {
    def   name
    def age
    def high
    def sex



    Person() {
    }
}


def person = new Person(name: "hello world",age: 13)
println person.dump()

输出:

<Person@55d56113 name=hello world age=13 high=null sex=null>

运算符重载

语法 :
def 重载操作符名称 (参数){
return 返回值
}

重载操作符名称说明,比说加法重载就是plus,乘法就是multiply.参考运算符官方说明

demo:

class Person {
    def name
    def age
    def high
    def sex

    Person() {
    }


    //重载+符号
    def plus(int obj) {
        return age + obj
    }
    //重载*符号
    def multiply(int obj) {
        return age * obj
    }
}


def person = new Person(name: "hello world", age: 13)

def newAge = person + 1
def newAge2 = person * 2

println "newAge $newAge newAge2 $newAge2"

更智能的多态性为

public class Human {
    public void sayHello(Object obj) {
        System.out.println("Human say $obj");
    }
}

public class WoMan extends Human {
    public void sayHello(String obj) {
        System.out.println("WoMan say $obj");
    }
}

以下是在java中的测试

import groovy.lang.GroovyShell;

public class JavaMain {
    public static void main(String[] args) {

       Human human=new WoMan();
       human.sayHello("str");
       human.sayHello(1);
    }
}

Human say $obj
Human say $obj

然而在groovy的输出:

class Main {
    public static void main(String[] args) {

        def human = new WoMan()
        human.sayHello("str")
        human.sayHello(1)
    }
}

输出:

WoMan say $obj
Human say $obj

groovy输出我们预期的行为

最后

以上就是坦率星星为你收集整理的Groovy的Bean对象的全部内容,希望文章能够帮你解决Groovy的Bean对象所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部