<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="markdown-here-wrapper" data-md-url="" style="">
      <p style="margin: 0px 0px 1.2em !important;">On 14/02/2023 01:06,
        Dan Smith wrote:</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:D6A4B805-E2A3-4F87-BF09-FEF6AF0263AA@oracle.com">
          <div>LS isn't always clear about which of these two signatures
            it's talking about, but in this case, given the use of
            different phrases in the third and fourth rules, and the
            fact of javac's longstanding behavior, I think that's the
            intent.</div>
          <div><br>
          </div>
          <div>(It makes sense, too, because the underlying problem is
            that you don't want the descriptors to clash in the class
            file. And they don't, because one has descriptor '(Object)V'
            and the other is '(Class)V'. Eventually, somebody might try
            to override something and need a bridge method that *would*
            clash, but in that case there would be another method for
            which this error check should apply.)</div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">Exactly.</p>
      <p style="margin: 0px 0px 1.2em !important;">The checks in 8.4.8
        are there to ensure you can’t accidentally override a bridge
        method. As Dan points out, the underlying descriptors are
        different here, so no real problem occurs. When writing the
        checks for 8.4.8 I had to scan these rules multiple times - and
        I agree that some clarification could be in order here. I think
        reading them with the glasses of “no accidental bridge method
        override” is generally a useful metaphore - and, since the JLS
        cannot speak about bridge methods, that results in a somewhat
        convoluted formulation of the rules.</p>
      <p style="margin: 0px 0px 1.2em !important;">The example Archie
        shown is one of those cases where there’s obviously something
        “fishy” going on, but the compiler decides to go ahead with it,
        kicking the can down the road, to when the abstract class will
        become a concrete one. So, if a new class comes along, like
        this:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-java" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">EvenLower</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">R</span>> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">extends</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Lower</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">R</span>> </span>{
       <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">method</span><span class="hljs-params">(Class<?> c)</span> </span>{ }
}
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">A problem will be
        reported - because the class will still need to implement <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">method(Class<R>)</code>
        - but of course if you try to do that, you will get a clash.</p>
      <p style="margin: 0px 0px 1.2em !important;">That said, your
        subclass can have a raw declaration:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-java" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;"> <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">EvenLower</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">R</span>> <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">extends</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">Lower</span><<span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;color: rgb(68, 85, 136); font-weight: bold;">R</span>> </span>{
        <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> <span class="hljs-title" style="color: rgb(153, 0, 0); font-weight: bold;">method</span><span class="hljs-params">(Class c)</span> </span>{ }
 }
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">In which case
        everything is ok (beause <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">method(Class)</code>
        is a subsignature of the sharper <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">method(Class<R>)</code>).</p>
      <p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
      <div title="MDH:PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDE0LzAyLzIwMjMgMDE6MDYsIERhbiBTbWl0aCB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0
ZT0ibWlkOkQ2QTRCODA1LUUyQTMtNEY4Ny1CRjA5LUZFRjZBRjAyNjNBQUBvcmFjbGUuY29tIj48
ZGl2PkxTIGlzbid0IGFsd2F5cyBjbGVhciBhYm91dCB3aGljaCBvZiB0aGVzZSB0d28gc2lnbmF0
dXJlcyBpdCdzIAp0YWxraW5nIGFib3V0LCBidXQgaW4gdGhpcyBjYXNlLCBnaXZlbiB0aGUgdXNl
IG9mIGRpZmZlcmVudCBwaHJhc2VzIGluIAp0aGUgdGhpcmQgYW5kIGZvdXJ0aCBydWxlcywgYW5k
IHRoZSBmYWN0IG9mIGphdmFjJ3MgbG9uZ3N0YW5kaW5nIApiZWhhdmlvciwgSSB0aGluayB0aGF0
J3MgdGhlIGludGVudC48L2Rpdj4KPGRpdj48YnI+CjwvZGl2Pgo8ZGl2PihJdCBtYWtlcyBzZW5z
ZSwgdG9vLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gaXMgdGhhdCB5b3UgCmRvbid0
IHdhbnQgdGhlIGRlc2NyaXB0b3JzIHRvIGNsYXNoIGluIHRoZSBjbGFzcyBmaWxlLiBBbmQgdGhl
eSBkb24ndCwgCmJlY2F1c2Ugb25lIGhhcyBkZXNjcmlwdG9yICcoT2JqZWN0KVYnIGFuZCB0aGUg
b3RoZXIgaXMgJyhDbGFzcylWJy4gCkV2ZW50dWFsbHksIHNvbWVib2R5IG1pZ2h0IHRyeSB0byBv
dmVycmlkZSBzb21ldGhpbmcKIGFuZCBuZWVkIGEgYnJpZGdlIG1ldGhvZCB0aGF0ICp3b3VsZCog
Y2xhc2gsIGJ1dCBpbiB0aGF0IGNhc2UgdGhlcmUgCndvdWxkIGJlIGFub3RoZXIgbWV0aG9kIGZv
ciB3aGljaCB0aGlzIGVycm9yIGNoZWNrIHNob3VsZCBhcHBseS4pPC9kaXY+PC9ibG9ja3F1b3Rl
PjxwPkV4YWN0bHkuPC9wPjxwPlRoZSBjaGVja3MgaW4gOC40LjggYXJlIHRoZXJlIHRvIGVuc3Vy
ZSB5b3UgY2FuJ3QgYWNjaWRlbnRhbGx5IG92ZXJyaWRlIGEgYnJpZGdlIG1ldGhvZC4gQXMgRGFu
IHBvaW50cyBvdXQsIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3JzIGFyZSBkaWZmZXJlbnQgaGVy
ZSwgc28gbm8gcmVhbCBwcm9ibGVtIG9jY3Vycy4gV2hlbiB3cml0aW5nIHRoZSBjaGVja3MgZm9y
IDguNC44IEkgaGFkIHRvIHNjYW4gdGhlc2UgcnVsZXMgbXVsdGlwbGUgdGltZXMgLSBhbmQgSSBh
Z3JlZSB0aGF0IHNvbWUgY2xhcmlmaWNhdGlvbiBjb3VsZCBiZSBpbiBvcmRlciBoZXJlLiBJIHRo
aW5rIHJlYWRpbmcgdGhlbSB3aXRoIHRoZSBnbGFzc2VzIG9mICJubyBhY2NpZGVudGFsIGJyaWRn
ZSBtZXRob2Qgb3ZlcnJpZGUiIGlzIGdlbmVyYWxseSBhIHVzZWZ1bCBtZXRhcGhvcmUgLSBhbmQs
IHNpbmNlIHRoZSBKTFMgY2Fubm90IHNwZWFrIGFib3V0IGJyaWRnZSBtZXRob2RzLCB0aGF0IHJl
c3VsdHMgaW4gYSBzb21ld2hhdCBjb252b2x1dGVkIGZvcm11bGF0aW9uIG9mIHRoZSBydWxlcy48
L3A+PHA+VGhlIGV4YW1wbGUgQXJjaGllIHNob3duIGlzIG9uZSBvZiB0aG9zZSBjYXNlcyB3aGVy
ZSB0aGVyZSdzIG9idmlvdXNseSBzb21ldGhpbmcgImZpc2h5IiBnb2luZyBvbiwgYnV0IHRoZSBj
b21waWxlciBkZWNpZGVzIHRvIGdvIGFoZWFkIHdpdGggaXQsIGtpY2tpbmcgdGhlIGNhbiBkb3du
IHRoZSByb2FkLCB0byB3aGVuIHRoZSBhYnN0cmFjdCBjbGFzcyB3aWxsIGJlY29tZSBhIGNvbmNy
ZXRlIG9uZS4gU28sIGlmIGEgbmV3IGNsYXNzIGNvbWVzIGFsb25nLCBsaWtlIHRoaXM6PC9wPjxw
PmBgYGphdmE8YnI+Y2xhc3MgRXZlbkxvd2VyJmx0O1ImZ3Q7IGV4dGVuZHMgTG93ZXImbHQ7UiZn
dDsgezxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdm9pZCBtZXRob2Qo
Q2xhc3MmbHQ7PyZndDsgYykgeyB9PGJyPn08YnI+YGBgPGJyPjwvcD48cD5BIHByb2JsZW0gd2ls
bCBiZSByZXBvcnRlZCAtIGJlY2F1c2UgdGhlIGNsYXNzIHdpbGwgc3RpbGwgbmVlZCB0byBpbXBs
ZW1lbnQgYG1ldGhvZChDbGFzcyZsdDtSJmd0OylgIC0gYnV0IG9mIGNvdXJzZSBpZiB5b3UgdHJ5
IHRvIGRvIHRoYXQsIHlvdSB3aWxsIGdldCBhIGNsYXNoLjwvcD48cD5UaGF0IHNhaWQsIHlvdXIg
c3ViY2xhc3MgY2FuIGhhdmUgYSByYXcgZGVjbGFyYXRpb246PC9wPjxwPmBgYGphdmE8YnI+CmNs
YXNzIEV2ZW5Mb3dlciZsdDtSJmd0OyBleHRlbmRzIExvd2VyJmx0O1ImZ3Q7IHs8YnI+CiZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIG1ldGhvZChDbGFzcyBjKSB7IH08
YnI+Cn08YnI+CmBgYDxicj4KPC9wPgo8cD5JbiB3aGljaCBjYXNlIGV2ZXJ5dGhpbmcgaXMgb2sg
KGJlYXVzZSBgbWV0aG9kKENsYXNzKWAgaXMgYSBzdWJzaWduYXR1cmUgb2YgdGhlIHNoYXJwZXIg
YG1ldGhvZChDbGFzcyZsdDtSJmd0OylgKS48YnI+PC9wPjxwPjwvcD48cD5NYXVyaXppbzxicj48
        L3A+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>