What does a tilde in angle brackets mean when creating a Java generic class?

JavaGenericsIntellij IdeaSyntaxTilde

Java Problem Overview


I was reading through some JMockit examples and found this code:

final List<OrderItem> actualItems = new ArrayList<~>();

What does the tilde in the generic identifier mean? I know it's the unary bitwise NOT operator, but I don't see an operand here.

Also, I tried compiling it and got an error. Am I just missing something?

Java Solutions


Solution 1 - Java

> It is just a shorthand for "same as in declaration".

Some IDEs, e.g. IntelliJ use this too.

The files on disk do not have this notation, which is only a compaction in the IDE GUI.

Solution 2 - Java

If there wasn't a tilde, I'd say, the code was already Java 7. Java 7 allows the diamond operator so this is/will be legal Java code:

Map<String, List<String>> map = new HashMap<>();

(but - no tilde with this syntax)

Solution 3 - Java

In IntelliJ IDEA, the ~ here:

Set<String> associations = new LinkedHashSet<~>();

means String, which is the same as in the declaration on the left side.

Solution 4 - Java

I think that is shorthand to mean whatever the type is, in this case OrderItem.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichael KView Question on Stackoverflow
Solution 1 - JavaopenCageView Answer on Stackoverflow
Solution 2 - JavaAndreas DolkView Answer on Stackoverflow
Solution 3 - JavaRomanKoustaView Answer on Stackoverflow
Solution 4 - JavaAndrew WhiteView Answer on Stackoverflow