And*_*ann 7 kotlin kotlin-extension
Kotlin具有几个可见性修饰符和扩展功能.文件说明了这一点Extensions are resolved statically.但这对扩展函数中类成员的可见性意味着什么呢?
让我们考虑以下人为的例子:
class A { protected val a = "Foo" }
fun A.ext() { print(a) } //Raises: Cannot access 'a': it is 'protected' in 'A'
class B { val b = "Bar" }
fun B.ext() { print(b) } //Compiles successful
Run Code Online (Sandbox Code Playgroud)
代码不会编译.在扩展类时似乎无法访问受保护的成员.
因此,解决静态意味着扩展函数是在Java中具有类似内容的语法糖:
public static void ext(A receiver){ System.out.print(receiver.a); }
Run Code Online (Sandbox Code Playgroud)
这可以解释为什么受保护的成员无法访问.另一方面,可以this在扩展函数中使用(甚至省略).
那么扩展功能的确切范围是什么?
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |