У меня есть быстрый вопрос о безопасности типаJava и «Тип безопасность ...»
У меня есть этот метод и переменный класс, определенные:
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>
.
Первый метод getCurrentInstance в ConfigurationBean является:
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;
}
Метод getListBait() из MetaDataBean выглядит это:
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.
Заранее благодарен!
Редактировать
... и, пройдя через это редактирование, фактически решило его!
Что случилось, что, вероятно, некоторые дружественные советы от Затмения «помог» мне определить MetaDataBean так:
public class MetaDataBean<whyFish> extends BaseBean implements Serializable {
:
:
... и это не имеет смысла. Я не могу сказать, когда это маленькое «» было добавлено в декларацию, - но удаление, из-за которого все предупреждения исчезли :-)
Спасибо большое! - Сейчас я до сих пор верю немного в том, что Java я знаю, до сих пор ;-)
/John
Пожалуйста, покажите короткую, но * полную * программу, демонстрирующую проблему. Здесь слишком много мы не знаем. Кроме того, обратите внимание, что нет необходимости использовать 'if (null == ...)' в Java ... причины его использования на некоторых языках не применимы к Java (где условие 'if' должно быть 'boolean' выражение) и поместить эту переменную в первую очередь для большинства людей. –
Пожалуйста, проверьте, являются ли «ConfigurationBean» или некоторые из возвращаемых значений.Не предоставление общих параметров здесь может привести к тому, что компилятор также отключит их в вызове метода. – Thomas
Как подсказывает @Thomas, проблема, вероятно, в 'getCurrentInstance' или' getMeta', а также объявление класса возвращаемых типов. – Radiodef