Yes, it is totally on the table that the language model doesn't bother to 
introduce an implicit class or interface above the inline class, and instead 
we're talking about two types derived from a single class declaration.

No matter what choice we make there, there's a separate question of whether 
inline classes can extend other classes, and I'm arguing that there are some 
good reasons that they should.

(There's also the question of how a 'ref' type gets compiled, nevermind what 
the language model says, and whether an abstract class would be a useful tool 
for that purpose.)

> On Dec 19, 2019, at 2:51 AM, Remi Forax <fo...@univ-mlv.fr> wrote:
> 
> It occurs to me that we may have jump into the conclusion that we should use 
> inheritance/implementation a little to fast.
> At least, i think it worth exploring another complementary option.
> 
> In Java, you have several ways to have subtyping,
> saying a FooInline is a subclass FooInline.ref is one way,
> but using wildcard is another one, if Foo<?> can be a template classes with 
> Foo<inline bit> the inline.
> 
> It will not solve the retrofitting of java.lang.Number so it's a 
> complementary approach but it can solve the retrofitting of java.lang.Integer 
> in a better way than to use subclasses.
> 
> Let say java.lang.Integer is a template class, but not a template class over 
> a type like a specialized generics are but a template class over the inline 
> bit.
> In that case java.lang.Integer can have two specializations, one is an 
> indirect type, the result of new Integer(8), and one is an inline type the 
> result of Integer.valueOf(8).
> 
> The nice properties of this organization are:
> - object.getClass() will return Integer.class for both specializations (it's 
> not the same species but it's the same class).
> - java.lang.Integer can still be final (because final means no subclass but 
> not no subtype).
> 
> Rémi
> 
> 
> 
> 

Reply via email to