Making Object abstract
daniel.smith at oracle.com
Fri May 7 22:06:59 UTC 2021
I notice a number of times in current design documents that we state a rule and then have a parenthetical "except for Object, which is special". A lot of this specialness is due to Object behaving like an abstract class, even though it is not abstract.
I think we'd have a cleaner design if we just updated Object to be abstract.
- The expression 'new Object()' wouldn't normally be allowed, but we plan to special-case this anyway to produce an instance of IdentityObject.
- Similarly, a 'new java/lang/Object' instruction would normally cause a InstantiationError, but we plan to special-case it.
- Reflection would expose the ACC_ABSTRACT flag. <shrug>
- The JVM story for opting in to primitive subclasses would need to work for class Object just as well as other abstract classes. We can design for that.
- As long as this is a preview feature, we might need two different versions of Object.class, depending on whether --enable-preview is set. But we need to do that for Integer, etc., anyway, so should be doable.
Am I missing anything that would be particularly disruptive?
More information about the valhalla-spec-observers