<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">Hi Zden</font></font><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">ě</font></font><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">k,</font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><br></font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">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&lt;R,X>) but with different type arguments, and according to the JLS :</font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><br></font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><br></font></font></div><div><p style="margin: 0.0px 0.0px 16.0px 0.0px"><font style="font: 16.0px Times"><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="font-size: 12px;"><font class="Apple-style-span" color="#000000"><i>"A class may not at the same time be a subtype of two interface types which are different invocations of the same generic interface </i></font></span></font><a href="http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#78598"><font style=""><u><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="font-size: 12px;"><font class="Apple-style-span" color="#000000"><i>(§9.1.2)</i></font></span></font></u></font></a><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="font-size: 12px;"><font class="Apple-style-span" color="#000000"><i>, or an invocation of a generic interface and a raw type naming that same generic interface.</i></font></span></font></font></p><p style="margin: 0.0px 0.0px 16.0px 0.0px"><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><i>...</i><span class="Apple-style-span" style="font-family: Helvetica; "><font class="Apple-style-span" face="Arial"><i><font class="Apple-style-span" color="#000000"></font></i></font></span></font></font></p><p style="margin: 0.0px 0.0px 16.0px 0.0px"><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><span class="Apple-style-span" style="font-family: Helvetica; "><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><i>This requirement was introduced in order to support translation by type erasure </i></font></font><a href="http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#108979"><font style=""><u><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><i>(§4.6)</i></font></font></u></font></a><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><i>."</i></font></font></span></font></font></p><p style="margin: 0.0px 0.0px 16.0px 0.0px"><span class="Apple-style-span" style="font-family: Arial; ">(From <a href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.5">http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.5</a> )</span></p></div><div><br></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">Regards,</font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000"><br></font></font></div><div><font class="Apple-style-span" face="Arial"><font class="Apple-style-span" color="#000000">Mark</font></font></div><div><br></div><br><div><div>On 16 May 2008, at 08:32, <a href="mailto:tronicek@fel.cvut.cz">tronicek@fel.cvut.cz</a> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hi,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">this is compilable:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface J1 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>Integer invoke();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface J2 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>Number invoke();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface J3 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>Object invoke();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface J4 extends J1, J2, J3 { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>class C3 implements J1, J2, J3 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>public Integer invoke() { return null; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>class C4 implements J4 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>public Integer invoke() { return null; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">and this is not:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface I1 extends { => Integer } { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface I2 extends { => Number } { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface I3 extends { => Object } { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface I4 extends I1, I2, I3 { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>class C1 implements I1, I2, I3 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>public Integer invoke() { return null; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>class C2 implements I4 {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">        </span>public Integer invoke() { return null; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">But probably should be. As well as this:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">    </span>interface Simple extends { => Integer }, { => Number }, { => Object } { }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Zdenek</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">--<span class="Apple-converted-space"> </span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Zdenek Tronicek</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Department of Computer Science and Engineering</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Prague <span class="Apple-converted-space">                  </span>tel: +420 2 2435 7410</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><a href="http://cs.felk.cvut.cz/~tronicek">http://cs.felk.cvut.cz/~tronicek</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div> </blockquote></div><br></body></html>