I just stumbled upon the compiler treating these two terms differently. when I type:
LinkedList<String> list = new LinkedList();
I get a compiler warning about a raw type. however:
LinkedList<String> list = new LinkedList<>();
removes the warning. It seems to me as though the two statements mean essentially the same thing (i.e. create a new LinkedList with no specified object type). Why then does the complier all ow the empty generics? What is the difference here?
The statements do not mean the same thing at all.
The first statement tries to fit an untyped
LinkedListinto a declared genericLinkedList<String>and appropriately throws a warning.The second statement, valid in Java 1.7 onward, uses type inference to guess the type parameter by using the declaring type’s type parameter. In addition, sometimes this can be used in method calls. It doesn’t always work, however.
See this page for more info.