将泛型类注释为JSF托管bean

Mar*_*tus 4 java generics jsf

我遇到了以下类型的代码:

@ManagedBean
@SessionScoped
SomeClass<T> {
    ... blah-blah
}
Run Code Online (Sandbox Code Playgroud)

由于框架将其实例化为没有类型信息的通用SomeClass对象,您是否看到此类代码的任何好处?或者你会把它归类为代码味道?

Bal*_*usC 7

泛型是编译时语法糖(因此在运行时完全不存在).JSF在运行时(通过反射方式)实例化bean.所以,是的,这绝对是代码味道.只有SomeClass托管bean扩展的基类(但它本身不是托管bean)才有意义.

例如

public abstract class CrudBean<T extends SomeBaseEntity> {
    private List<T> entities;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

@ManagedBean
public class ProductsBean extends CrudBean<Product> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)