Я ищу способ проверить, является ли некоторый данный Список неизменяемым.
У меня есть объект с List<NoMatter>
, чтобы предлагать методы, такие как addNoMatter(NoMatter nm)
вместоразрешив клиенту API просто выполнить .getNoMatters().add(nm);
Я всегда возвращаю неизменяемую версию этого списка, поэтому клиент все еще может иметь этот список.Я делаю это следующим образом:
public List<NoMatter> getNoMatters() {
return Collections.unmodifiableList(this.noMatters);
}
Проблема в том, что когда я делаю свои тесты, я просто не могу проверить, относится ли этот объект к типу UnmodifiableList.Моя первая попытка была следующей:
@Test
public void checkIfListIsImmutable(){
assertTrue("List is not immutable", this.myObj.getNoMatters() instanceof UnmodifiableList);
}
Бывает, что я не могу импортировать тип UnmodifiableList
ни java.util.Collections$UnmodifiableRandomAccessList
, это то, что я получаю, когда пытаюсь System.out.println(myObj.getNoMatters().getClass().getName());
на консоли.
Итак, как мне этого добиться ???
PS: я знаю, что могу пройти этот тест, выполнив:
@Test(expected = UnsupportedOperationException.class)
public void checkIfListIsImmutable(){
this.myObj.getNoMatters().add(null);
}
РЕДАКТИРОВАТЬ: Вышеприведенный тест не дает мне уверенности, что список, с которым я имею дело, не является неизменным, так как мне нужно было бы иметь тесты для каждого метода, который может изменить мой исходный список, включая .remove (), .clear (), .shuffle ()., так далее!Вот почему я не думаю, что это хороший способ продолжить.
>>> Но я все еще считаю, что это даже близко не элегантное решение!<<< </em>