Joja
Joja

Reputation: 370

What does var<T> do in Java?

A friend of mine noticed that

var<Integer> list = new ArrayList<Double>();

was valid in Java. It turns out that the type of list is evaluated to ArrayList<Double>.

When using var<Integer> list = new ArrayList<>();, list is just ArrayList<Object>.

Both of us were not able to figure out, what the generic type of var does, as it seems to be ignored. But if so, why is this even syntactically correct in the first place?

Upvotes: 9

Views: 946

Answers (2)

Joja
Joja

Reputation: 370

As it turns out, the usage of var<T> is only allowed in Eclipse with JDT core, javac does not accept this. Therefore, I assume this is a bug in Eclipse.

EDIT: As @MC Emperor showed, this is definitely a bug. I have added this bug to the Eclipse Bugzilla.

Upvotes: 8

MC Emperor
MC Emperor

Reputation: 23037

This is indeed a bug, but the proof lies in the Java Language Specification § 14.4 Local Variable Declaration Statements:

LocalVariableType:
    UnannType
    var

Ad you can see, the restricted identifier var is listed without any other token. Also, UnannType eventually resolves to the token TypeIdentifier which explicitly forbids var.

So no, var<Integer> is not valid.

Upvotes: 5

Related Questions