Inheritance
tronicek at fel.cvut.cz
tronicek at fel.cvut.cz
Fri May 16 07:24:43 PDT 2008
Hi Mark,
this is a perfect answer to question "Why the compiler prototype does
not compile it?". But should the compiler work this way? This is the
question I asked in my previous email.
Z.
--
Zdenek Tronicek
Department of Computer Science and Engineering
Prague tel: +420 2 2435 7410
http://cs.felk.cvut.cz/~tronicek
Quoting Mark Mahieu <mark at twistedbanana.demon.co.uk>:
> Hi Zdeněk,
>
> I think the problem here is that the types { => Integer }, { => Number
> } and { => Object } are all instances of the same generic interface
> (javax.lang.function.O<R,X>) but with different type arguments, and
> according to the JLS :
>
>
> "A class may not at the same time be a subtype of two interface types
> which are different invocations of the same generic interface
> (§9.1.2), or an invocation of a generic interface and a raw type
> naming that same generic interface.
>
> ...
>
> This requirement was introduced in order to support translation by
> type erasure (§4.6)."
>
> (From http://java.sun.com/docs/books/jls/third_edition/html/
> classes.html#8.1.5 )
>
>
> Regards,
>
> Mark
>
>
> On 16 May 2008, at 08:32, tronicek at fel.cvut.cz wrote:
>
>> Hi,
>>
>> this is compilable:
>>
>> interface J1 {
>> Integer invoke();
>> }
>>
>> interface J2 {
>> Number invoke();
>> }
>>
>> interface J3 {
>> Object invoke();
>> }
>>
>> interface J4 extends J1, J2, J3 { }
>>
>> class C3 implements J1, J2, J3 {
>> public Integer invoke() { return null; }
>> }
>>
>> class C4 implements J4 {
>> public Integer invoke() { return null; }
>> }
>>
>> and this is not:
>>
>> interface I1 extends { => Integer } { }
>>
>> interface I2 extends { => Number } { }
>>
>> interface I3 extends { => Object } { }
>>
>> interface I4 extends I1, I2, I3 { }
>>
>> class C1 implements I1, I2, I3 {
>> public Integer invoke() { return null; }
>> }
>>
>> class C2 implements I4 {
>> public Integer invoke() { return null; }
>> }
>>
>> But probably should be. As well as this:
>>
>> interface Simple extends { => Integer }, { => Number }, { =>
>> Object } { }
>>
>> Zdenek
>> --
>> Zdenek Tronicek
>> Department of Computer Science and Engineering
>> Prague tel: +420 2 2435 7410
>> http://cs.felk.cvut.cz/~tronicek
>>
>>
>>
>>
>>
>>
More information about the closures-dev
mailing list