《Kotlin核心编程》 ——3.4 真正的数据类

举报
华章计算机 发表于 2020/02/21 22:53:31 2020/02/21
【摘要】 本节书摘来自华章计算机《Kotlin核心编程》 —— 书中第3章,第3.4.1节,作者是水滴技术团队 。

3.4 真正的数据类

通过前面的内容我们发现,Kotlin在解决多继承问题上非常灵活。但是有时候,我们并不想要那么强大的类,也许我们只是想要单纯地使用类来封装数据,类似于Java中的DTO(Data Transfer Object)的概念。但我们知道在Java中显得烦琐,因为通常情况下我们会声明一个JavaBean,然后定义一堆getter和setter。虽然IDE能帮我们自动生成这些代码,但是你很可能已经厌烦了这些冗长的代码了。下面就来看看Kotlin是如何改进这个问题的吧。

3.4.1 烦琐的JavaBean

首先我们先来回顾一下熟悉的JavaBean。当我们要定义一个数据模型类时,就需要为其中的每一个属性定义getter、setter方法。如果要支持对象值的比较,我们甚至还要重写hashcode、equals等方法。比如下面的例子:

public class Bird {

    private double weight;

    private int age;

    private String color;

 

    public void fly() {

    }

 

    public Bird(double weight, int age, String color) {

        this.weight = weight;

        this.age = age;

        this.color = color;

    }

 

    public double getWeight() {

        return weight;

    }

 

    public void setWeight(double weight) {

        this.weight = weight;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.age = age;

    }

 

    public String getColor() {

        return color;

    }

 

    public void setColor(String color) {

        this.color = color;

    }

 

    @Override

    public boolean equals(Object o) {

        if (this == o)

            return true;

        if (!(o instanceof Bird))

            return false;

 

        Bird bird = (Bird) o;

 

        if (Double.compare(bird.getWeight(), getWeight()) != 0)

            return false;

        if (getAge() != bird.getAge())

            return false;

        return getColor().equals(bird.getColor());

    }

 

    @Override

    public int hashCode() {

        int result;

        long temp;

        temp = Double.doubleToLongBits(getWeight());

        result = (int) (temp ^ (temp > > > 32));

        result = 31 * result + getAge();

        result = 31 * result + getColor().hashCode();

        return result;

    }

 

    @Override

    public String toString() {

        return "Bird{" +

                "weight=" + weight +

                ", age=" + age +

                ", color='" + color + '\'' +

                '}';

    }

}

这是一个只有3个属性的JavaBean,但代码量竟然足有60多行。可想而知,若是你想要更多的属性,那么一个JavaBean将会有多少代码量,而你的初衷无非就是想要有一个单纯封装数据的类而已,最后却变成了一堆样板式的代码。幸运的是,在Kotlin中我们将不再面对这个问题,它引入了data class的语法来改善这一情况。让我们来看看它到底是一个什么东西。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。