Re: Question re testing constructor
On 12/6/2011 8:24 PM, Stefan Ram wrote:
Ian Shef<invalid@avoiding.spam> writes:
ram@zedat.fu-berlin.de (Stefan Ram) wrote in news:null-20111206201830
@ram.dialup.fu-berlin.de:
If the Java compiler is so smart at detecting null values,
why does he not also give an error on code like:
(( java.io.PrintStream )null ).println()
?
Short answer: Because the JLS says so. (see the third edition, paragraph
15.16 where it is explained that most casts are handled at run time).
Something similar:
It is difficult for me to forecast an ??unreachable statement?? error.
For example, I would have expected such an error for
public class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( "alpha3" );
if( true )return;
java.lang.System.out.println( "beta3" ); }}
, but did *not* get one, however, the compiler knows that the
beta3 statement *is* unreachable, because he does not care to
compile it.
IIRC, the JLS actually describes why this case does not generate an
unreachable code exception. The idea is to permit what is, in essence,
conditional compilation:
class Foo {
public final static bool DEBUG = false;
public void frozinate() {
if (DEBUG)
log("Frozinating...");
// ... do real work ...
}
}
By handling this case, you could switch the value of DEBUG to select or
unselect some code to be run at runtime; you shouldn't have to eradicate
all if(DEBUG) code whenever you throw the switch to false.
--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth