Take the 2-minute tour ×

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?

share|improve this question

3 Answers 3

up vote 51 down vote accepted

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.

share|improve this answer
It was an Intellij screenshot. –  Michael K Feb 3 '11 at 15:30
Just for personal clarification - IntelliJ produces Java source files with this notation, iaw, source files with illegal Java content??? Or is this just the view of the source and the saved file is correct? –  Andreas_D Feb 3 '11 at 15:53
@Andreas_D: It is just a view. The files on disk are ok. –  openCage Feb 3 '11 at 15:54
And actually, the tilde is grayed (to indicate that it's different), and if you click on it, it'll expand to the full definition. –  yshavit Sep 13 '13 at 17:58

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)

share|improve this answer

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

share|improve this answer

Your Answer


