Java 10 var: Difference between revisions
Line 18: | Line 18: | ||
<tt>var</tt> may not be used when there is no [[Java_Language#Variable_Initializer|variable initializer]]. Also, polymorphic assignments cannot be generally made when <tt>var</tt> is used, because the type inference associates the variable with a specific type, and not with any of its super types. | <tt>var</tt> may not be used when there is no [[Java_Language#Variable_Initializer|variable initializer]]. Also, polymorphic assignments cannot be generally made when <tt>var</tt> is used, because the type inference associates the variable with a specific type, and not with any of its super types. | ||
Variable inference cannot be used with fields, or within method signatures, and they cannot be used without explicit initialization - the compiler won't know what type to associate them with. Variable inference cannot be used when the variable is initialized with null, for the same reason. | |||
=Details= | =Details= |
Revision as of 19:36, 25 May 2018
Internal
Overview
The feature behind the Java 10 new keyword var is called local variable type inference: functionality added to the Java compiler, which is now able to infer the type of a variable from the variable initializer. This new compiler functionality make possible to replace the type in a local variable declaration with the keyword var. The compiler fills in the appropriate type:
Before var:
Map<String, List<String>> catalog = new HashMap<>();
With var:
var catalog = new HashMap<String, List<String>>();
var may not be used when there is no variable initializer. Also, polymorphic assignments cannot be generally made when var is used, because the type inference associates the variable with a specific type, and not with any of its super types.
Variable inference cannot be used with fields, or within method signatures, and they cannot be used without explicit initialization - the compiler won't know what type to associate them with. Variable inference cannot be used when the variable is initialized with null, for the same reason.
Details
The var inference algorithm looks only at the expression being assigned to the variable in the variable initializer in order to deduce the type.
var and Code Readability
Type inference reduces the amount of time it takes to write Java code, but in some cases does not necessarily improve its readability. Some say that developers spend much more time reading source coding than writing it, so probably the amount of time it takes to write the code should be optimized in favor of readability. This is an example where var does not improve readability:
var removes the reader ability to guess about the code's intent sim[ply from the type of the variable.
However, there may be cases when var actually improves readability by eliminating obviously redundant type declaration in a very local context. Logically, this is similar to naming a variable "i" instead of "internalProcessId" in a short loop. This is an example where var improves readability and it comes with an additional, not immediately obvious, advantage.