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. Implications: - 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?