java as转换,Java转Kotlin:智能类型转换

例子

Java中的类型转换

//Java

public class Main {

public static void main(String[] args) {

Person bob = new Chinese("Bob");

if (bob instanceof Chinese) {

System.out.println(((Chinese)bob).name);//重点

}

}

}

interface Person {}

class Chinese implements Person {

public String name;

public Chinese(String name) {

this.name = name;

}

}

复制代码

Kotlin中的智能类型转换

interface Person

class Chinese(var name: String) : Person

fun main() {

var bob: Person = Chinese("Bob")

if (bob is Chinese) {

println(bob.name)//重点

}

}

复制代码

如下图

对象bob已经经过了类型判断,再进行强制类型转换是多余的。在这样的情形下,Kotlin编译器将为我们进行智能类型转换。

再例

Kotlin空类型智能类型转换

//Kotlin

fun main() {

val hello: String? = "Hello"

if (hello != null) {

println(hello.length)

}

}

复制代码

判断有效的大括号范围内,hello被只能转换成String,在大括号外,hello仍是String?类型。

不支持智能类型转换的情形

IDE告诉我们,此情形下的hello变量是一个全局变量,可能被main线程之外的线程访问修改,因此,即使已经有了hello != null的判断,也不能保证hello在被使用时是非空的String类型。因此,无法进行智能类型转换。

安全类型转换

Kotlin使用关键字as对类的对象进行强制类型转换,但是,转换可能并不能成功。基于此,Kotlin推出了安全类型转换。

bob as Chinese ---> bob as? Chinese

使用as?关键字,如转换不成功,语句将返回null。

类型转换的建议

尽可能使用val来声明不可变引用,让程序的含义更加清晰确定;

尽可能减少函数对外部变量的访问,也为函数式编程提供基础;

必要时创建局部变量指向外部变量,避免因它变化引起程序错误。

总结

例子 Java中的类型转换 //Java public class Main { public static void main(String[] args) { Person bob = new Chinese("Bob"); if (bob instanceof Chinese) { System.out.println(((Chinese)bob).name);//重点 } } } interface Person {} class Chinese implements Person { public String name; public Chinese(String name) { this.name = name; } } 复制代码 Kotlin中的智能类型转换 interface Person class Chinese(var name: String) : Person fun main() { var bob: Person = Chinese("Bob") if (bob is Chinese) { println(bob.name)//重点 } } 复制代码 如下图 对象bob已经经过了类型判断,再进行强制类型转换是多余的。在这样的情形下,Kotlin编译器将为我们进行智能类型转换。 再例 Kotlin空类型智能类型转换 //Kotlin fun main() { val hello: String? = "Hello" if (hello != null) { println(hello.length) } } 复制代码 判断有效的大括号范围内,hello被只能转换成String,在大括号外,hello仍是String?类型。 不支持智能类型转换的情形 IDE告诉我们,此情形下的hello变量是一个全局变量,可能被main线程之外的线程访问修改,因此,即使已经有了hello != null的判断,也不能保证hello在被使用时是非空的String类型。因此,无法进行智能类型转换。 安全类型转换 Kotlin使用关键字as对类的对象进行强制类型转换,但是,转换可能并不能成功。基于此,Kotlin推出了安全类型转换。 bob as Chinese ---> bob as? Chinese 使用as?关键字,如转换不成功,语句将返回null。 类型转换的建议 尽可能使用val来声明不可变引用,让程序的含义更加清晰确定; 尽可能减少函数对外部变量的访问,也为函数式编程提供基础; 必要时创建局部变量指向外部变量,避免因它变化引起程序错误。 总结
经验分享 程序员 微信小程序 职场和发展