gpt4 book ai didi

Java 和 "Type Safety..."

转载 作者:行者123 更新时间:2023-12-01 12:06:27 25 4
gpt4 key购买 nike

我有一个关于类型安全的简单问题

我定义了这个方法和一个类变量:

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 的一些友好建议“帮助”我定义了 MetaDataBean,如下所示:

public class MetaDataBean<whyFish> extends BaseBean implements Serializable {
:
:

...这没有意义。我不知道那个小“”何时被添加到声明中 - 但删除它会使所有警告消失:-)

非常感谢!! - 现在我仍然对我目前所了解的 Java 有一点信任;-)

/约翰

最佳答案

由于原始类型是该类型的删除 ( 4.8 ),因此原始 MetaDataBeangetListBait 返回原始 List

解决方案是从 MetaDataBean 中删除泛型类型参数,或者不使用原始类型,具体取决于该参数是否确实必要。

关于Java 和 "Type Safety...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com