Type equality for values

Brian Goetz brian.goetz at oracle.com
Fri Aug 1 18:07:11 UTC 2014


Certainly if we cannot prove T=U then I think this equality comparison makes no sense.  But if we have

  <any T> boolean foo(A<T> a, A<T> b) { return a==b; }

this does make sense (assuming we are comparing values for state equality via ==).


On Aug 1, 2014, at 10:10 AM, Paul Govereau <paul.govereau at oracle.com> wrote:

> The following code is valid for reference types:
> 
> class A<T> {
>    int x = 0;
> 
>    <T,U> boolean foo(A<T> a, A<U> b) {
>        return (a == b);
>    }
> }
> 
> However, I don't think this makes sense for value types. In the case of reference types, the "top" is a realizable type, namely Object; but, for values the "top" is not realizable?
> 
> final __ByValue class A<T> {
>    final int x = 0;
> 
>    <any T, any U> boolean foo(A<T> a, A<U> b) {
>        return (a == b);  // <<--- type error ??
>    }
> }
> 
> Should this be a type error?
> 
> Paul




More information about the valhalla-dev mailing list