This is not too important right now, but I had thoughts, so...
On Thu, Jun 1, 2023 at 10:59 AM Brian Goetz <[email protected]> wrote: Users should be able to say `new Complex()` and get a default complex > value. (Maybe they can also say `Complex.default`; maybe we won't need > that.) And the same for reflection. > I think the argument for `MyVal.default` being *unnecessary* might go like this: * either there's no implicit constructor and `MyVal.default` won't work * or there is, and `MyVal.default` would have to mean the same as `new MyVal()`, so what's the point? If that's correct, there might not be a strong argument for keeping it, but I came up with a couple weak ones. 1. Arguably, its meaning is more apparent without the reader having to dig into MyVal.java (how much does this matter, in this case?) 2. It *feels like* a well-known immutable value that just kind of "exists" and has no need to be constructed. A constant. In fact people might feel tempted to make such constants? Note I do still approve of `public implicit MyVal();` and even of calling that a "constructor", because it nearly enough plays that role. But something about the term "implicit construction" doesn't seem right. "Default initialization" seems more on point I guess.) (Tangent: while the choice of keyword isn't that important right now, I have already found myself saying "explicit implicit constructor" and then frowning in momentary confusion :-)) -- Kevin Bourrillion | Java/Kotlin Ecosystem Team | Google, Inc. | [email protected]
