私は次のタイプのコードに出くわしました:
@ManagedBean
@SessionScoped
SomeClass<T> {
... blah-blah
}
フレームワークはこれを型情報のない一般的なSomeClassオブジェクトとしてインスタンス化するので、そのようなコードから何か利点がありますか?それとも、コードの臭いとして分類しますか?
ジェネリックスはコンパイル時の構文糖衣です(したがって、実行時に完全に存在しません)。JSFは、実行時にBeanをインスタンス化します(リフレクション手段によって)。だから、はい、これは間違いなくコードの臭いです。がマネージドBeanの拡張元である基本クラスである場合にのみ意味SomeClass
があります(ただし、それ自体はマネージドBeanではありません)。
例えば
public abstract class CrudBean<T extends SomeBaseEntity> {
private List<T> entities;
// ...
}
と
@ManagedBean
public class ProductsBean extends CrudBean<Product> {
// ...
}