数据类

在Java代码中,数据类通常需要重写equals()、hashCode()、toString()这几个方法。虽然有快捷方式可以自动生成,但是还是要我们去点击生成下,并且一个简单的数据类就算没有其他复杂逻辑看着也挺繁琐的,代码如下:

public class UserBean {

private String name;

private String pwd;

public UserBean(String name, String pwd) {

this.name = name;

this.pwd = pwd;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

...

@Override

public String toString() {

return "UserBean{" +

"name='" + name + '\'' +

", pwd='" + pwd + '\'' +

'}';

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

UserBean userBean = (UserBean) o;

return name.equals(userBean.name) && pwd.equals(userBean.pwd);

}

@Override

public int hashCode() {

return Objects.hash(name, pwd);

}

Kotlin中的数据类自动帮我们解决了这个问题,同样新建一个数据类,代码如下:

data class UserBean(var name: String, var pwd: String)

只需要一行代码就可以实现了!神奇的地方就在于data这个关键字,当在一个类前面声明了data关键字时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成,从而大大减少了开发的工作量。

数据类使用:

fun main() {

val user1 = UserBean("tom", "123")

val user2 = UserBean("tom", "123")

println(user1)

println(user1 == user2)

}

//运行结果

//UserBean(name=tom, pwd=123)

//true

单例类

在Kotlin中创建一个单例类的方式极其简单,只需要将class关键字改成object关键字即可。代码如下:

object Singleton {

fun test(){

println("Singleton test!!")

}

}

单例类的使用:

fun main() {

Singleton.test()

}

看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个Singleton类的实例,并且保证全局只会存在一个Singleton实例。

反编译上面单例类:

public final class Singleton {

@NotNull

public static final Singleton INSTANCE;

public final void test() {

String var1 = "Singleton test!!";

boolean var2 = false;

System.out.println(var1);

}

private Singleton() {

}

static {

Singleton var0 = new Singleton();

INSTANCE = var0;

}

}

在反编译main调用函数:

public static final void main() {

Singleton.INSTANCE.test();

}

能看出实际调用的是单例中的实例Singleton.INSTANCE。

通过数据类与单例类学习可以看出Kotlin对Java中的各种繁琐代码进行了优化,可以使程序员把更多精力放在业务逻辑上面,也简化了代码行数,减少了代码阅读量。

查看原文