Очень хороший пример, который я могу дать вам для classcastException в Java, используется при использовании «Collection»
List list = new ArrayList();
list.add("Java");
list.add(new Integer(5));
for(Object obj:list) {
String str = (String)obj;
}
. Этот выше код даст вам ClassCastException во время выполнения. Поскольку вы пытаетесь использовать Integer для String, это вызовет исключение.
Вы можете использовать пользовательский cellFactory
, чтобы отображать элементы таким образом, который подходит вашим потребностям:
ComboBox<Dummy> comboBox = ...
Callback<ListView<Dummy>, ListCell<Dummy>> factory = lv -> new ListCell<Dummy>() {
@Override
protected void updateItem(Dummy item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? "" : item.getName());
}
};
comboBox.setCellFactory(factory);
comboBox.setButtonCell(factory.call(null));
Я предполагаю, что ComboBox вы имеете в виду: http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ComboBoxBase.html . Поскольку getValue()
- public
, вы можете сделать:
public class MyComboBox<T> extends ComboBox<T> {
private final Dummy dummy;
public MyComboBox(Dummy dummy) {
this.dummy = dummy;
}
public T getValue() {
return dummy.getName();
}
}
getValue
на String
, что во многих случаях приведет к ClassCastException
. Кроме того, вы возвращаете имя того же Dummy
, независимо от значений, выбранных в ComboBox
. И последнее, но не менее важное getValue()
- final
и, следовательно, нельзя переоценить.
– fabian
18 December 2016 в 13:07