コトルは、visibility modifiersとextension functionsの2つの特徴を備えています。ドキュメントには、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
:
はのは、以下の不自然な例を考えてみましょう。保護されたメンバーは、クラスを拡張するときにアクセスできないと思われます。
だからは静的に解決ん拡張機能はJavaでこのような何かを持つための糖衣構文であることを意味:
public static void ext(A receiver){ System.out.print(receiver.a); }
protectedメンバにアクセスできない理由が説明するだろう。一方、拡張機能ではthis
を使用することができます(省略することもできます)。
拡張機能の正確な範囲は何ですか?