この前書いたやつ( Java8のラムダとScala 2.12(LambdaMetafactoryによるシングルトンのキャッシュ) )の発展版というか、Scalaで違い見つけたので貼っておく
https://gist.github.com/xuwei-k/9e988896648fd7389de1350b8cb9d81e
Scalaだと内部traitあるとキャッシュされなくなるが、Javaだとされる。誰か
あたりを、scala-internalのメーリングリストか、stack overflowあたりで英語で聞いてくれていいですよ (最初自分でやろうとしたけど、英語面倒になってblogに書いてる)
やっぱり自分で聞いた http://stackoverflow.com/questions/40779511
気づいた経緯やおまけ(?)的な話としては
- この前blog書いたように scalaz.Semigroupって実装同じ場合はキャッシュされるのかな?
- scalaz.Semigroup https://github.com/scalaz/scalaz/blob/v7.3.0-M7/core/src/main/scala/scalaz/Semigroup.scala
- あれ・・・されない・・・なぜだ
- 内部traitがあるせいか?
- じゃあ内部traitやめたほうが良いんだろうか?でも、キャッシュのためだけにやめるべきかどうか・・・。scalazにissue立てるか・・・、いやその前にscalaコンパイラ作ってる人になんでJavaと違ってるのか聞くべきか?
- どっちにしろ、scalaz.Semigroup でやってるような、trait内で内部traitで外部のtraitの実装参照するの、Javaの現状のinterfaceではたぶん無理だろうから、つまりどういうことだ(?)