Java和"类型安全......"

时间:2014-12-18 18:26:45

标签: java typesafe

我有一个关于类型安全的快速问题

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

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; - )

/约翰

2 个答案:

答案 0 :(得分:1)

由于原始类型是该类型(4.8)的删除,原始MetaDataBean会从List返回原始getListBait

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

答案 1 :(得分:0)

根据上一次编辑。一个类定义中添加了一个泛型 - 可能是在Eclipse的友好帮助下(显然我接受了它而不知道我做了什么!)。

对进一步信息的出色评论帮助找到了错误的声明: - )