ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Java8 レシーバーパラメーター

2020-06-24 18:00:32 | PG(Java)

本日の話題:https://twitter.com/nagise/status/1275684711390679040

メソッドの引数にthisが指定されているけど何?という話。
聞き覚えがあるような無いような気がしたけど、自分のページには記載が無かったのできっと知らなかったのだろう^^;というわけで追加した。→レシーバーパラメーター

ググってみると、megascusさんのブログが引っかかった。さすがやで。
アノテーションを付けるための仕組みらしい。ラムダ式のvarもそのために追加されたんだったなぁ。

いまいちぴんと来ないけど、RIP Tutorialというサイトによると、内部クラスのコンストラクターの(暗黙の)引数である親クラスインスタンスに対しても同様の指定が出来るらしい。
(これと整合性を合わせるために、メソッドの引数でもthisを指定できるようにしたのではないかなーという気がする)
こちらなら、まだアノテーションを付けたい場合がありそうな気がしないでもない。

ちなみにこのサイトの例は間違ってるみたいで、親クラスのthisを指定するコンストラクターは
Inner(Outer Outer.this)
のように親クラス名でthisを修飾しないといけないみたい。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メソッド参照とジェネリクス

2020-06-10 22:33:15 | PG(Java)

https://twitter.com/RayStark77/status/1270436862142763008
https://twitter.com/mike_neck/status/1270499714111115264

メソッド参照で、そのメソッドの引数違いが定義されている(要するにオーバーロードされている)ときにエラーになるという話があった。
メソッドの引数の個数が違うならちゃんと一意に決まるから大丈夫なはず…と思って試してみたら、Function<String, Integer>のように型引数にクラスが指定されている場合は大丈夫だったけど、<A, B> Function<A, B>のように決まっていない場合は駄目らしい。

どうもメソッド参照の曖昧さ解決の問題というより、ジェネリクスの型推論が上手くいっていない雰囲気だけど。
それとは別に、そもそもFunctionには引数が1つのメソッドしか渡せないんだから、引数が2つの同名メソッドが定義されていても無視してくれていい気がする。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする