I'm reading the book `Java generics and collections` by Maurice Naftalin.

In the section on wildcard capturing, the author gave an example 

```
public static void reverse(List<?> list) { 
    rev(list); 
}

private static <T> void rev(List<T> list) {
    List<T> tmp = new ArrayList<T>(list);
    for (int i = 0; i < list.size(); i++) {
        list.set(i, tmp.get(list.size()-i-1));
    }
}

```

But I thought type `List<T>` is a subtype of `List<?>` (where `List<?>` is a shorthand syntax for `List<? extends Object>`) (is my assumption of `List<T>` is a subtype of `List<? extends Object>` even correct?), so inside the `reverse` method, how can we pass variable `list` (of type `List<? extends Object>`) to `rev` method, where the `rev` method's parameter is of type `List<T>`?