Question: e.g. 

```
public interface CacheClient
{
    List<?> getKeysWithExpiryCheck();
}

```

Or should I return 

```
List<Object>

```

Answer: 
If you declare your method as

```
List<Object> getKeysWithExpiryCheck();

```

You can only return `List<Object>` instances from it, and nothing else. If you e.g. try to return `List<String>`, you get a compilation error. This is because although `Object` is a supertype of `String`, `List<Object>` is not a supertype of `List<String>`.
Could it be to ensure type safety? Returning a List of object means that the list could hold anything.