私は約 10000 LoC のプロジェクトの前に座っています。このプロジェクトを Scala 2.9 から 2.10 に更新する必要があります。これはよくできていましたが、マニフェストが原因で多くの非推奨警告が表示されました。
stackoverflow や他の多くのサイトの検索機能を使用した後、あまり質問がなくなりました。要約したいと思います。重要なポイントは次のとおりです。
TypeTags と ClassTags は、Manifests と ClassManifest よりもはるかに優れています。特に、これらを同義語として使用できます (TypeTags <-> Manifests および ClassTags <-> ClassManifest)。
TypeTags は ClassTags よりも強力で、ClassTags はより制限された TypeTags です。私の最初の質問:このプロジェクトでは、メソッド
manifest[T].erasure.getSimpleName
がよく使用されます。typeTag[T].runtimeClass.getSimpleName
コードがコンパイルされないため、これをに切り替えることはできませんが、コンパイルclassTag[T].runtimeClass.getSimpleName
するとコンパイルされます。これはセマンティクスに影響しますか? (注: このメソッドerasure
も非推奨です。runtimeClass
代わりに使用する必要があります)2 番目の質問: Scala 2.9 でのマニフェストの型チェックは、次のようなものでし
manifest[T] <:< manifest[A]
た。Scala 2.10 では、このように記述しtypeOf[T] <:< typeOf[A]
ます。しかし<:<
、非推奨ですか?TypeTag を ClassTag にキャストできますか? つまり、型チェック (番号 3) と名前抽出 (番号 2) にのみマニフェストを使用する場合:すべてのマニフェスト/クラスマニフェストの名前を ClassTag に変更できますか?