Comment on Java 21 makes me actually like Java again
BatmanAoD@programming.dev 1 year agoThey allude to this later, acknowledging that it’s sort of a cross between unit and bottom.
Comment on Java 21 makes me actually like Java again
BatmanAoD@programming.dev 1 year agoThey allude to this later, acknowledging that it’s sort of a cross between unit and bottom.
aloso@programming.dev 1 year ago
No it’s not, it is 100% a unit type (except it’s not really a type, since you can only use it as return type and nowhere else)
BatmanAoD@programming.dev 1 year ago
It’s not possible to instantiate or assign, which is more like a never type than a unit; and it is not possible to define new types with the same properties, which is also more like bottom than unit. But you’re right that it’s not actually a true never type since it can’t represent function divergence.
I think the truth is just that Java’s type system isn’t very mathematically disciplined.
aloso@programming.dev 1 year ago
Actually, this is because
void
is not a type, it is just a keyword, that is allowed only instead of the return type.If it were a bottom type, that would mean that a method returning
void
must diverge, which is simply not true.Also, even if it were a bottom type, it would be possible to write an “unreachable” method
But it is not, because
void
isn’t a bottom type, it’s no type at all.BatmanAoD@programming.dev 1 year ago
The post has been edited; it looks like someone on reddit made essentially the same point. You’re right of course that
void
isn’t a true type in Java, but the post now also discusses Void, which I suppose just shows how void infects the type system despite not being a type.