4

私は次のタイプのコードに出くわしました:

@ManagedBean
@SessionScoped
SomeClass<T> {
    ... blah-blah
}

フレームワークはこれを型情報のない一般的なSomeClassオブジェクトとしてインスタンス化するので、そのようなコードから何か利点がありますか?それとも、コードの臭いとして分類しますか?

4

1 に答える 1

7

ジェネリックスはコンパイル時の構文糖衣です(したがって、実行時に完全に存在しません)。JSFは、実行時にBeanをインスタンス化します(リフレクション手段によって)。だから、はい、これは間違いなくコードの臭いです。がマネージドBeanの拡張元である基本クラスである場合にのみ意味SomeClassがあります(ただし、それ自体はマネージドBeanではありません)。

例えば

public abstract class CrudBean<T extends SomeBaseEntity> {
    private List<T> entities;
    // ...
}

@ManagedBean
public class ProductsBean extends CrudBean<Product> {
    // ...
}
于 2013-01-16T18:22:29.243 に答える