KotlinのJavaメソッドを非表示にする方法はありますか?

ピエトロ・マルティネリ:

私はKotlinを学んだし、私は、この日読んでいるアクションでKotlinを拡張機能と標準ライブラリの改善についての章を読んで、私はによって公開されたさまざまな行動について読んString.splitJavaとKotlinの間のオーバーロード:私はそれが区切り文字ベースおよび正規表現ベースの間に明確な、より型導かれた分離に向かって移動するのは非常に良いアイデアだと思いますオーバーロード。

このことについて、私は上記きた本はと言うKotlinは混乱の方法を隠し、名前の代替いくつかのオーバーロードされた拡張機能として提供してsplit異なる引数を持っています

拡張機能は、「私は既存のクラスにメソッドを追加することができますどのように」questioneに応じます。一方で、私はそれがにpossibileです方法を見つけ出すことはできません非表示にする Javaの標準ライブラリで提供された方法

私は、簡単なコードを書いて、いくつかの試みをした、と私は気づい

  1. val ks = "Pietro Martinelli" 持っています ks::class.qualifiedName == "kotlin.String"
  2. val ks = "Pietro Martinelli" 持っています ks::javaClass.name == "java.lang.String"
  3. 上記の値を渡すksJavaメソッドに、受信したパラメータをx有しているx.getClass().getName() == "java.lang.String"(予想通り)
  4. String js = "Pietro Martinelli"(Javaコードでは)はjs.getClass().getName() == "java.lang.String"予想通り、
  5. 上記通過jsKotlin方法値を、受信したパラメータをy有しているy::class.qualifiedName == "kotlin.String"y.getClass().getName() == "java.lang.String"(これまでに予想されるように)

だから、:それ(私が言わせて)いるようだ何かの魔法は、私が使用している場合に発生StringKotlinからJavaへKotlinの値と、前後を。私が正しくundestand場合は、StringKotlinにおけるリテラルはのインスタンスであるkotlin.Stringが、それらはに囲まれているJava型透過的にJavaメソッド呼び出しのために使用されています。この方法では、Kotlinライブラリは向上させることができますString影響を与えることなく、経験をjava.lang.String通常のJava:[java.lang.]String.splitメソッドがされている隠された Kotlinの開発者が見るという意味でKotlinコードに[kotlin.]Stringインスタンスとその方法を。

だから、2(関連)質問:1.私の理解、右ですか?そして、より多く2.興味深いことは、コンパイラによる代わりに魔法プットの唯一のようなものだ知っている Stringのインスタンスなどの特殊なタイプを、別のクラスのインスタンスの後ろにそれらをラップし、またはいくつかのより一般的なアプローチがある/メカニック許可すること何らかの方法隠すクラスのいくつかの方法で、我々は、拡張機能の整備士を通じてメソッドを追加することができます同じように?だから、非常に危険なことが、私はそれがコンパイラの問題だけだと思うが、私はそれが問題価値があると思うので、それは、あまりにも、強力です。

ヒントやフィードバックのために事前にありがとうございます。

zsmb13:

残念ながら、これはコンパイラの魔法です。これらは呼ばれてマッピングされたタイプ、およびコンパイラは、彼らがJVMにコンパイルした場合、実行時に、彼らは通常のJava型のインスタンスであるにも関わらず、インターフェースを変更したKotlinの種類としてKotlinコードに表示されるようにそれを作るために彼らに特別な治療を与えます。

以外にString、最も顕著な例は、おそらく完全に新しいインターフェースの二つの層を持っているコレクションは、読み取り専用と可変変種のために、それらに適用されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178461&siteId=1