Я знаю, что это старше, но на сегодняшний день отметим 2 пункта в ответе Мэтта Перепела.
Точка 1
Это
List<Cat> cats = Collections.checkedList(Cat.class, q.list());
Должно быть это
List<Cat> cats = Collections.checkedList(q.list(), Cat.class);
Точка 2
Из этого
List list = q.list();
к этому
List<T> list = q.list();
уменьшит количество других предупреждений, очевидно, в оригинальном ответном теге маркеры были удалены браузером.