我有一个关于类型安全的快速问题
我有这个方法和一个类变量定义:
private List<SelectItem> listBait = null;
public List<SelectItem> getListBait() {
// Cache to avoid resorting and rebuilding list numerous times
if (null == listBait) {
listBait = ConfigurationBean.getCurrentInstance().getMeta().getListBait();
}
return listBait;
}
现在,我收到了关于if中的赋值的警告。它说Type safety: The expression of type List needs unchecked conversion to conform to List<SelectItem>
。
首先,ConfigurationBean中的getCurrentInstance方法是:
public static ConfigurationBean getCurrentInstance() {
// This is a neat way to get a handle on the instance of this bean in the application scope from other Java code...
FacesContext context = Util.getFacesContext();
ConfigurationBean bean = (ConfigurationBean) context.getApplication().getVariableResolver().resolveVariable(context, "Configuration");
return bean;
}
...并且getMeta方法(和实例变量)是:
private final MetaDataBean meta = new MetaDataBean();
public MetaDataBean getMeta() {
return meta;
}
MetaDataBean中的getListBait()方法如下所示:
public List<SelectItem> getListBait() {
List<SelectItem> options = new ArrayList<SelectItem>();
for (Bait bait : getAllBaits()) {
if (!bait.isInActive()) {
options.add(new SelectItem(bait.getKey(), bait.getName()));
}
}
return options;
}
所以根据我的理解,它不应该提出有问题的警告......?任何人都可以向我解释一下 - 建议的解决方案似乎无法解决问题(除了@SuppressWarning ;-))。
这是在Java 1.6上。
提前致谢!
修改
......通过这个编辑实际上解决了它!
发生的事情可能是Eclipse和#34的一些友好建议帮助了#34;我像这样定义MetaDataBean:
public class MetaDataBean<whyFish> extends BaseBean implements Serializable {
:
:
......这没有意义。我不能告诉那个小小的&#34;&#34;已被添加到声明中 - 但删除使所有警告消失: - )
非常感谢!! - 现在我仍然相信我到目前为止所知道的Java; - )
/约翰
答案 0 :(得分:1)
由于原始类型是该类型(4.8)的删除,原始MetaDataBean
会从List
返回原始getListBait
。
解决方案是从MetaDataBean
中删除泛型类型参数,或者不使用原始类型,具体取决于参数是否真的有必要。
答案 1 :(得分:0)
根据上一次编辑。一个类定义中添加了一个泛型 - 可能是在Eclipse的友好帮助下(显然我接受了它而不知道我做了什么!)。
对进一步信息的出色评论帮助找到了错误的声明: - )