Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
The start of 5.5 lists various conversions that are allowed in a casting context. "Casting contexts allow the use of one of: ��� an identity conversion (��5.1.1) ��� a widening primitive conversion (��5.1.2) ��� a narrowing primitive conversion (��5.1.3) ��� a widening and narrowing primitive conversion (��5.1.4) ��� a widening reference conversion (��5.1.5) optionally followed by either an unboxing conversion (��5.1.8) or an unchecked conversion (��5.1.9) ��� a narrowing reference conversion (��5.1.6) optionally followed by either an unboxing conversion (��5.1.8) or an unchecked conversion (��5.1.9) ��� a boxing conversion (��5.1.7) optionally followed by a widening reference conversion (��5.1.5) ��� an unboxing conversion (��5.1.8) optionally followed by a widening primitive conversion (��5.1.2)." This list has various problems: - It doesn't include all allowed reference type casts (per 5.5.1), such as from Runnable to Cloneable - It doesn't allow widening before unboxing followed by primitive widening, even though javac does (see JDK-8166326) - The use of "widening and narrowing primitive conversion" adds unnecessary complexity, since we could just as easily describe this as "a widening primitive conversion followed by a narrowing primitive conversion". (Cleaning this up means deleting 5.1.4, though, a disruption that may not be worth it.) - It gives the impression that any listed conversion is allowed, even though some unchecked conversions are not (per 5.5.1) - It is redundant, since the next paragraph restates it more precisely. Propose rewriting to merge with the subsequent description and to accurately reflect the set of legal conversions.
|