4


私は約 10000 LoC のプロジェクトの前に座っています。このプロジェクトを Scala 2.9 から 2.10 に更新する必要があります。これはよくできていましたが、マニフェストが原因で多くの非推奨警告が表示されました。

stackoverflow や他の多くのサイトの検索機能を使用した後、あまり質問がなくなりました。要約したいと思います。重要なポイントは次のとおりです。

  1. TypeTags と ClassTags は、Manifests と ClassManifest よりもはるかに優れています。特に、これらを同義語として使用できます (TypeTags <-> Manifests および ClassTags <-> ClassManifest)。

  2. TypeTags は ClassTags よりも強力で、ClassTags はより制限された TypeTags です。私の最初の質問:このプロジェクトでは、メソッドmanifest[T].erasure.getSimpleNameがよく使用されます。typeTag[T].runtimeClass.getSimpleNameコードがコンパイルされないため、これをに切り替えることはできませんが、コンパイルclassTag[T].runtimeClass.getSimpleNameするとコンパイルされます。これはセマンティクスに影響しますか? (注: このメソッドerasureも非推奨です。runtimeClass代わりに使用する必要があります)

  3. 2 番目の質問: Scala 2.9 でのマニフェストの型チェックは、次のようなものでしmanifest[T] <:< manifest[A]た。Scala 2.10 では、このように記述しtypeOf[T] <:< typeOf[A]ます。しかし<:<、非推奨ですか?

  4. TypeTag を ClassTag にキャストできますか? つまり、型チェック (番号 3) と名前抽出 (番号 2) にのみマニフェストを使用する場合:すべてのマニフェスト/クラスマニフェストの名前を ClassTag に変更できますか?

4

1 に答える 1