REPL bugs

Brian Goetz brian.goetz at oracle.com
Fri Feb 20 18:59:13 UTC 2015


Seems we are ignoring finality for both REPL-level vars and classes. 
But, unlike some other modifiers we ignore, these do have a sensible 
interpretation?

repl> final int x = 3;
   x

repl> x = 4;
   no error

-----

repl> final class Foo { }
   Foo

repl> class Bar extends Foo { }
   no error

repl> new Bar()
   no error

-----

repl> return 3
   // nothing

Probably best to reject "return x" as not being a statement that makes 
sense at top-level.

-----

-> System.exit(0)
|  State engine terminated.  Resetting...

-> new Thread() { public void run() { System.exit(0); } }.start()
|  State engine terminated.  Resetting...

Nice!

-----

Both static initializers and instance initializers seem to get executed 
as expressions:

-> static { System.out.println("x"); }
x

-> { System.out.println("x"); }
x

But I don't think these make sense at the top level -- they should 
probably be rejected.  (Arguably the latter might be interpreted as 
simply creating a new lexical scope, but the former is definitely a 
static initializer.)


More information about the kulla-dev mailing list