Невозможно привести java .util.Collections $ EmptySet к java .util.HashSet - PullRequest
0 голосов
/ 06 апреля 2020

Я использую Vaadin14 и Java 1.8. Я хочу реализовать комбинированный комбинированный список, поэтому я использую следующий аддон Vaadin: https://vaadin.com/directory/component/multiselect-combo-box/api/org/vaadin/gatanaso/MultiselectComboBox.html

Создание и использование комбинированного списка отлично работает, но я получаю ошибка

java.lang.RuntimeException: java.lang.ClassCastException: Cannot cast java.util.Collections$EmptySet to java.util.HashSet

при попытке «сохранить» объект без каких-либо элементов, выбранных в выпадающем списке. Если у меня выбран хотя бы один элемент, он работает нормально, но как только выбор пуст и я пытаюсь сохранить объект ("AnotherClass"), я получаю сообщение об ошибке.

// creating a combobox 
private MultiselectComboBox<MyClass> multiselectComboBox;
multiselectComboBox= new MultiselectComboBox<>();   

// setting items to choose from
final MyClassDataProvider dataProvider = new MyClassDataProvider();
List<MyClass> allAvailableOptions = new ArrayList<>(dataProvider.getItems());
multiselectComboBox.setItems(allAvailableOptions);
multiselectComboBox.setItemLabelGenerator(MyClass::getName); // display name only

// binding the combobox to a field of AnotherClass
binder = new BeanValidationBinder<>(AnotherClass.class);
binder.forField(multiselectComboBox)
            .bind("myHashSet");

// save-button
save = new Button("Save");
save.addClickListener(event -> {
    if (currentObject!= null
         && binder.writeBeanIfValid(currentObject)) { // error in this line
         viewLogic.saveRisk(currentObject);
    }
    });

HashSet является атрибутом в следующем классе:

public class AnotherClass  implements Serializable {

     @NotNull
     private int id = -1;

     private HashSet<MyClass> myHashSet= new HashSet<MyClass>();

}

Когда я создаю экземпляры AnotherClass, я всегда создаю их экземпляры не с нулевым, а с пустым HashSet для атрибута myHashSet ,

Как я могу исправить ошибку выше?

1 Ответ

0 голосов
/ 06 апреля 2020

После попытки подсказки, которую @Rogue дал мне в комментариях, я сначала попробовал это с помощью Set <>, но в конце концов уловка пошла на новый уровень абстракции вверх и использовала Collection <> вместо HashSet <> в классе определение (Oracle Документы ).

public class AnotherClass  implements Serializable {

     @NotNull
     private int id = -1;

     private Collection<MyClass> myHashSet= new HashSet<MyClass>();

}
...