sample
Input方法,传入int,String,boolean,这仨基本类型,默认为val定义,不能修改
a,b,c的修改 全都报 Val cannot be reassigned
然后,注释掉 a,b,c的修改,看看decompile后的java代码
然后,运行,报错 Val cannot be reassigned
看起来是 kotlin编译的时候做的检查
然后google一下,一致表示 需要这么写。。。。
看起来,跟上一个 坑 01,真是异曲同工呢。。。。
但是 val编译后不应该是 final int吗? 然后 在input方法里定义了一个
google将kotlin定为首选语言可以理解,毕竟google善于把产品做死。
但是
设计这个语言的人有啥毛病?
屮
2020年09月01日11:00:08
fun input(a: Int, b: String, c: Boolean, d: StringBuilder) { a += 1 b = b.replace("a", "b") c = false d.append("dddd") } fun testInput() { input(1, "abc", true, java.lang.StringBuilder("aa")) }
Input方法,传入int,String,boolean,这仨基本类型,默认为val定义,不能修改
a,b,c的修改 全都报 Val cannot be reassigned
然后,注释掉 a,b,c的修改,看看decompile后的java代码
public static final void input(int a, @NotNull String b, boolean c, @NotNull StringBuilder d) { Intrinsics.checkParameterIsNotNull(b, "b"); Intrinsics.checkParameterIsNotNull(d, "d"); d.append("dddd"); } public static final void testInput() { input(1, "abc", true, new StringBuilder("aa")); }java的参数并没有final呀
然后,运行,报错 Val cannot be reassigned
看起来是 kotlin编译的时候做的检查
然后google一下,一致表示 需要这么写。。。。
fun input(a: Int, b: String, c: Boolean, d: StringBuilder) { var tmpA = a tmpA += 1 // a += 1 // b = b.replace("a", "b") // c = false d.append("dddd") }再定义一个临时变量去做操作。。。。
看起来,跟上一个 坑 01,真是异曲同工呢。。。。
但是 val编译后不应该是 final int吗? 然后 在input方法里定义了一个
val aaa = "aaaaaaaa"发现生成的是
String aaa = "aaaaaaaa";看起来 val不一定会转成final String....
google将kotlin定为首选语言可以理解,毕竟google善于把产品做死。
但是
设计这个语言的人有啥毛病?
屮
2020年09月01日11:00:08
--
senRsl
2020年08月31日15:07:47
senRsl
2020年08月31日15:07:47
没有评论 :
发表评论