赞
踩
目录
Koltin声明变量的方式与Java类似,但是顺序不太一样。
举例如下
Java声明一个不可变String:final String name;
Java声明一个可变String:String name;
总结就是 变量修饰符(可选) 变量类型 变量名
Koltin声明一个不可变String:val name String;
Koltin声明一个可变String:var name String;
补充说明:val(value的简写),声明一个变量不可变,与Java中的final修饰类似;
var(variable的简写),声明一个变量可变,即不被final修饰;
总结就是 变量修饰符(可选) 变量名 变量类型
也可以看出,Java与Koltin声明变量最大的区别就是变量名和变量类型顺序换了一下;
Java中的方法定义方式
方法修饰符 方法返回值 方法名(参数1类型 参数1名称,参数2类型 参数2名称,......){方法体}
Koltin 中方法定义方式
fun(固定位fun,function的缩写) 方法名 (参数1名称 参数1类型,参数2名称 参数2类型,......):方法返回值类型{方法体}
Koltin语言中 if 关键字比Java语言中多了一个功能,它可以有返回值,很好理解,举例如下
- // fun定义一个方法,名为largeNumber,方法返回较大的一个数
- // 参数分别为 Int 类型的num1和Int类型的num2,方法返回值类型也为Int
- fun largerNumber(num1: Int, num2: Int): Int {
- // if 可以有返回值,返回较大的一个数,定义一个val不可变参数value接收
- val value = if (num1 > num2) {
- num1
- } else {
- num2
- }
- // 返回参数 value
- return value
- }
Java中,继承使用关键字 "extend",只要一个类没有被 final 修饰,默认就是可以被继承的。
继承方式为 子类 extend 父类
- // 定义父类Person人
- public class Person{
- }
- // 定义Student学生类继承Person人类
- public class Student extend Person{
- }
Koltin中,继承关键字要使用 "open",只有被"open"关键字修饰的类可以被继承,继承格式为
子类:父类()
举例如下:
- // 定义Father父类,切被open修饰
- open class Father {
- }
- // 父类Father被open修饰,子类Son可以继承Father
- // 继承格式为 子类:父类()
- class Son : Father(){
- }
Java中接口关键字为 "interface",Koltin中接口关键字也为"interface"
Java的接口实现比较简单,这里就不举例说明了,Koltin接口实现的方式如下图
- // 使用 interface 定义一个接口
- interface Person {
-
- // 定义两个变量 name 和 age,但是一般很少在接口中定义变量,只会定义接口方法,
- // 这里我只是举例说明
- var name: String
- var age: Int
-
- // 定义一个sayHell()接口方法,该方法无返回值
- fun sayHello()
-
- // 定义一个有返回值的接口方法largeNumber,方法返回值为Int
- fun largeNumber(num1: Int, num2: Int): Int
- }
-
- // 子类Student实现重写父接口Person中定义的方法
- class Student : Person {
- // override 重写父类中定义的name和age
- override var name: String = "Tom"
- override var age: Int = 18
-
- // override重写sayHello() 方法
- override fun sayHello() {
- println("$name is $age years old, say hello")
- }
-
- // override 重写largeNumber
- override fun largeNumber(num1: Int, num2: Int): Int{
- val value = if (num1 > num2) {
- num1
- } else {
- num2
- }
- return value
- }
- }
Koltin 中的数据类非常类似于Java中的JavaBean,但是比JavaBean要简化的多,它只需要在类的前面定义一个 "data",即可标记该类为数据类,如下代码所示
- data class 类名(
- var param1:数据类型,
- var param2:数据类型,
- ......
- ){// 没有结构体的时候,该大括号可以省略}
当我们声明了一个数据类之后,编译器会帮我们做以下几件事
(1)生成equals()
函数与hasCode()
函数;
(2)生成toString()
函数,由类名(参数1 = 值1,参数2 = 值2,....)
构成;
(3)由所定义的属性自动生成component1()、component2()、...、componentN()
函数,其对应于属性的声明顺序;
(4)copy()函数;
这里主要说一下componentN() 和 copy() 函数,很简单,它其实就是Java中的 get方法,set 方法。
下面我用代码来举例说明
Java代码定义一个User类,并定义name和pwd两个属性,如下所示
- // 定义一个 User 用户类,并定义 name 和age 两个变量
- public class User {
- private String name;
- private String pwd;
- // 添加无参构造器
- public User(){}
- // 添加全参构造器
- public User(String name, String pwd) {
- this.name = name;
- this.pwd = pwd;
- }
- // 生成每个属性变量的getter和setter方法
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getPwd() {
- return pwd;
- }
-
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- // 生成toString方法
- @Override
- public String toString() {
- return "User{" +
- "name='" + name + '\'' +
- ", pwd='" + pwd + '\'' +
- '}';
- }
- }
可以看到,JavaBean代码的实体类代码量很大,显得很臃肿,也许有些同学会说我可以在类上标记@Data,@Gatter,@Setter注解省很多事情。
也许你很急,但别急,我们看一下Koltin语言实现同样的效果有多简单
Koltin 定义User用户类,并定义name和age两个属性
data class User(val name : String, val pwd : String)
OK,一行代码搞定,是不是很简单
然后我们在来说刚才的 componentN() 和 copy() 函数怎么用
copy函数举例:
- // 定义
- val user1 = User("kotlin","123456")
- println(user1)
-
- // 使用copy函数修改name属性的值
- val newUser1 = user1.copy(name = "new Kotlin")
- println(newUser1)
copy函数,类似Java的setter方法,括号内要对当前对象哪个属性做修改,直接写 属性名 = "要修改的值" 即可。
componentN() 函数举例:
- val user1 = User("kotlin","123456")
- println(user1.component1());
- println(user1.component2());
控制台输出结果为
koltin
123456
简单来说,Kotlin
中定义一个数据类,则系统会默认自动根据参数的个数生成component1() ... componentN()
函数。
componentN()
函数就是用于解构声明的,现在我们的数据了共定义了name和pwd两个属性.
对应着,函数component1()获取到的就是第一个属性name;
函数component2()获取到的就是第二个属性pwd;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。