I have the following method

```
static <T> List<T> foo(List<T> arg) {

```

I want to create a List of the same type, call it `outcome`, as arg that I will eventually return. For example if 

```
ArrayList<Integer> arg = new ArrayList<Integer>();

```

I want foo to return an `ArrayList<Integer>` as well. 
If 

```
LinkedList<Integer> arg = new LinkedList<Integer>();

```

then I want foo to return a `LinkedList<Integer>`

I know `List<T> outcome = new List<T>();` will not work since List is abstract, so what am I suppose to write to do what I want?