我遇到了以下类型的代码:
@ManagedBean
@SessionScoped
SomeClass<T> {
... blah-blah
}
由于框架将其实例化为一个没有类型信息的通用 SomeClass 对象,您是否看到此类代码的任何好处?或者您会将其归类为代码异味吗?
泛型是编译时的语法糖(因此在运行时完全不存在)。JSF使用反射手段在运行时实例化bean。因此,这绝对是代码异味。仅当SomeClass
是托管bean继承自的基类(但本身并不是托管bean)时才有意义。
例如:
public abstract class CrudBean<T extends SomeBaseEntity> {
private List<T> entities;
// ...
}
并且
@ManagedBean
public class ProductsBean extends CrudBean<Product> {
// ...
}