Indeed, I intend that there are no explicit constructors or
    instance initializers here.  (There can't be constructors, because
    the class is unnamed!)


Hmm, I was under the impression I could drop all my `static`s while keeping the class signature if I wanted? But, if I can and even then explicit constrs and initers are banned, then indeed, at least one of my drawbacks is invalid. I don't think it undercuts my overall case that much.

Yes you can.  Example:

    class InstanceMain implements Serializable {
        public InstanceMain() { }

        public void main() { ... }
    }

and if you `java InstanceMain`, the launcher will do `new InstanceMain().main()`.

The two features -- no class header and instance main -- are orthogonal.  If you don't have a class header, you don't get explicit constructors.  If you use instance main, you must have a no-arg constructor, which could be supplied explicitlly (if there is a class header) or implicitly (whether or not there is a class header.)


    One or more class annotations could appear below package/imports?

    No package statement (unnamed classes live in the unnamed
    package), but imports are OK.


I'm confused; what does any of this have to do with package location? Isn't that orthogonal to everything we're discussing?

There's a world where package is relevant here, but it seems pretty esoteric.  If you define a class with no name, the thing you want to do with it is launch it directly.  Seems like putting it in a package makes little sense here.

Reply via email to