Mam metodę, która ma Set
obiektów. Metoda, którą deleguje, wymaga, aby Set
nie zawierał żadnych elementów zerowych. Chciałbym check the precondition, że Set
nie zawiera żadnych elementów zerowych wcześniej, w metodzie przed delegacją. Oczywistym kod rób tak to:Dokładny sposób sprawdzenia, czy zestaw nie zawiera wartości pustej
public void scan(Set<PlugIn> plugIns) {
if (plugIns == null) {
throw new NullPointerException("plugIns");
} else if (plugIns.contains(null)) {
throw new NullPointerException("plugIns null element");
}
// Body
}
Ale to jest błędne, ponieważ Set.contains()
może rzucić NullPointerException
jeśli realizacja samaSet
nie zezwala na elementy null. Catching następnie ignorowanie NullPointerException
w tym przypadku będzie działać but would be inelegant. Czy istnieje dobry sposób na sprawdzenie tego warunku?
Czy w interfejsie Set
występuje błąd projektowy? Jeśli implementacja Set
nigdy nie może zawierać wartości null, dlaczego zamiast tego należy wymagać , aby zawsze zwracać false
? Czy masz predykat isNullElementPermitted()
?
Jeśli masz konkretne wymaganie podobne do tego, podklasa 'Ustaw' i nie akceptuj' null' stawia. Poza tym nie używałbym tutaj słowa "else". –