<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><br>
</p>
<div class="moz-cite-prefix">On 02/02/2023 02:04, Archie Cobbs
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CANSoFxvzgaz4y-dNvk0N96bAoQEkZoK6gOPCYPGTtjoWE+TqSA@mail.gmail.com">
<div>Put another way, a static method is just an instance method
without a 'this' instance. So neither issue #1 or #2 is
possible. So, no problem, right?<br>
</div>
<div dir="ltr"><br>
</div>
<div>You might be able to write code that looks silly, but would
it actually be nonsensical?<br>
</div>
<div dir="ltr"><br>
</div>
<div><span style="font-family:monospace"> public class Foo<T
extends Number> {</span></div>
<div><span style="font-family:monospace"> public static
toFloat(T value) {</span></div>
<div><span style="font-family:monospace"> return
value.floatValue(); // why not?<br>
</span></div>
<div><span style="font-family:monospace"> }<br>
</span></div>
<div><span style="font-family:monospace"> }<br>
</span></div>
<div dir="ltr"><br>
</div>
</blockquote>
<p>IMHO, this is taking it a step too far.</p>
<p>As I said, I believe the issue stems from using the "static
context" trick to put restriction on _expressions_ - which then
ends up also affecting _types_.</p>
<p>I do not think the bug has to do with "static context" being
ill-defined. There is a big difference between using a T in a
constructor, and using T in a static method:</p>
<p>* when a constructor is called, you are already initializing a
_specific_ instance, so T is _bound_;<br>
* when a static method is called, there is no instance, so T is
_not bound_, and has no real meaning.</p>
<p>Allowing access to T from static method as if it was a "real
thing" seems like a recipe for disaster: how do we validate that
a call to `toFloat` is correct? And, if `toFloat` returned a T,
how do we validate that the return type is also used correctly at
the callsite? And which synthetic cast should be generated (given
that T not known?).</p>
<p>Maurizio<br>
</p>
</body>
</html>