With `<T>`, I can do either of these calls:

```
ScheduledExecutorService delegate = executorFactory.createExecutor(threadFactory);
// or
BlockingTaskAwareExecutorService delegate = executorFactory.createExecutor(threadFactory);
```

With ExecutorService, I'm forced to do:

```
ScheduledExecutorService delegate = (ScheduledExecutorService) executorFactory.createExecutor(threadFactory);
// or
BlockingTaskAwareExecutorService delegate = (BlockingTaskAwareExecutorService) executorFactory.createExecutor(threadFactory);
```

The former is way more elegant way. Both run exactly the same risk of `ClassCastException`s.