Question: I can create a [Guava `ImmutableList`](https://google.github.io/guava/releases/23.0/api/docs/com/google/common/collect/ImmutableList.html) with the `of` method, and will get the correct generic type based on the passed objects:

```
Foo foo = new Foo();
ImmutableList.of(foo);

```

However, [the `of` method with no parameters](https://google.github.io/guava/releases/23.0/api/docs/com/google/common/collect/ImmutableList.html#of--) cannot infer the generic type and creates an `ImmutableList<Object>`.

How can I create an empty `ImmutableList` to satisfy `List<Foo>`?

Answer: 
If you assign the created list to a variable, you don't have to do anything:

```
ImmutableList<Foo> list = ImmutableList.of();

```

In other cases where the type can't be inferred, you have to write `ImmutableList.<Foo>of()` as @zigg says.
`ImmutableList.<Foo>of()` will create an empty `ImmutableList` with generic type `Foo`. Though [the compiler can infer the generic type](https://stackoverflow.com/a/29776623/722332) in some circumstances, like assignment to a variable, you'll need to use this format (as I did) when you're providing the value for a function argument.