Springの最新バージョンを使用するようにアプリケーションをアップグレードしようとしています。現在、Spring3.0.7とHibernate3.5.6を使用しています。Spring 3.2.8に正常にアップグレードできますが、Spring 4にアップグレードすると、次のようなコンパイルエラーが発生します。
[ERROR] /Users/mraible/dev/foo-upgrades/foo-core/src/main/java/com/company/foo/dao/companydb/impl/hibernate/InFaxDAOImpl.java:[71,82] incompatible types
[ERROR] required: java.util.List<com.company.foo.common.domain.FaxPage>
[ERROR] found: java.util.List<capture#49 of ?>
メソッド呼び出しは次のようになります。
List<FaxPage> faxPages = getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, hqlParams, values);
リストタイプにキャストすることでコンパイルエラーを修正できますが、それは正しくないようです。
List<FaxPage> faxPages = (List<FaxPage>) getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, hqlParams, values);
下位互換性がないようにHibernateDaoSupportを壊すSpring4についてはどうですか?
これは、Springフレームワークが生のリスト宣言を返すために使用され、その生のリスト宣言では基本的に任意の型を宣言できるためです。これを行うと、コンパイラーは、@SuppressWarnings("unchecked")
宣言で「無視」できる警告を発行します。
これには下位互換性が提供されている可能性がありますが、多くの参照では、「新しいコード」でrawリストを使用しないことを提案しています。
raw型の使用は、レガシーコードの互換性への譲歩としてのみ許可されます。Javaプログラミング言語にジェネリックスを導入した後に記述されたコードでraw型を使用することは強くお勧めしません。Javaプログラミング言語の将来のバージョンでは、raw型の使用が許可されなくなる可能性があります。
このスレッドは、その問題の良い要約です。
私はあなたが以前できたことの利点を確かに理解できますが、あなたがしたようにあなたのコードを更新することをお勧めします、はい:あなたはとにかく以前に暗黙のキャストをしていました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加