根据官方文档及编译后的class文件,可以得出:
Kotlin的可见属性以以下方式映射到Java中:
● private 成员仍编译成 java中private 成员
● private top-level declarations 编译成 java中package-local declarations。默认情况下,top-level的成员或方法会在当前包下被单独编译成“文件名+kt”的class文件,包含此private属性或方法,且仅原kotlin文件内的定义的类可以调用,其他类无法调用。对于非const属性,会通过“文件名+Kt.access$get+属性+$p()”的方式调用。
● protected 编译成 java中protected (不过需要注意,Java中的protected允许从本包内的其他类访问,但Kotlin不是,kotlin总是生成get/set方法以供调用,不能直接访问,所以java类有更广泛的范围访问。)
● internal编译成java中 public 。internal类的成员经历了名称修改,使得从Java中意外地使用它们变得更加困难,并且允许根据Kotlin规则对具有相同签名的成员进行重载,这些成员彼此看不到彼此;编译成class时会生get/set$production_sources_for_module_$module_name()的方法
● public 仍编译成 public.
参考:http://kotlinlang.org/docs/reference/visibility-modifiers.html
本文详细解析了Kotlin中不同访问修饰符的属性如何映射为Java代码,包括private、protected、internal和public等关键字的区别,以及它们在Java中的具体实现方式。
394

被折叠的 条评论
为什么被折叠?



