@Override
        public boolean matches(Object actual) {
            if (!(actual instanceof List)) return false;
            
            List<?> list = (List<?>) actual;
            this.actual = list;
            
            if (list.size() != items.length) return false;
            
            for (Object obj : list) {
                Object other = items[idx];
                if (obj != null && !obj.equals(other)) {
                    return false;
                } else if (obj == null && other != null) {
                    return false;
                }
                idx++;
            }
            return true;
        }