RFR: 8188055: (ref) Add Reference::refersTo predicate [v6]

Kim Barrett kbarrett at openjdk.java.net
Sat Oct 24 19:25:37 UTC 2020


On Fri, 16 Oct 2020 19:22:16 GMT, Mandy Chung <mchung at openjdk.org> wrote:

>> I just want to note that if you have a `Reference<SomeType> ref` at hand, you can not just do:
>> Referemce<Object> r = (Reference<Object>) ref;
>> ...since those generic types are not related. You have to do something like:
>> 
>> @SuppressWarnings({"unchecked", "rawtypes"})
>> Referemce<Object> r = (Reference) ref;
>> which is very unfortunate. Comparing this method with for example `Collection.contains(Object element)`, you can see that Collection API has made a decision to not bother with T here. That was also due to keeping old code compatible when migrating from pre-generics Java to generified Collection, but as @dfuch noted, we have a migration story here too. We will be migrating `obj == ref.get()` to `ref.refersTo(obj)` ... Mind you that this is a boolean expression fragment which might be written inline surrounded with other parts of expression. So you'll be forced to split that into assignment with @SuppressWarnings and an expression or you will have to force the whole expression or method to @SuppressWarnings. I don't know if type "safety" is forth it here.
>
> Reference instances should not be leaked and so I don't see very common that caller of `Reference::get` does not know the referent's type.   It also depends on the `refersTo` check against `null` vs an object.  Any known use case would be helpful if any (some existing code that wants to call `refersTo` to compare a `Reference` of raw type with an object of unknown type).
> 
> FWIW, when converting a few use of `Reference::get` to `refersTo` in JDK, there is only one case (`equals(Object o)` method that needs the cast.
> 
> http://cr.openjdk.java.net/~mchung/jdk15/webrevs/8188055/jdk-use-refersTo/index.html

Is there a consensus on this issue?  It's not clear whether Daniel and Peter have agreed with Mandy's responses or have just not yet responded with further discussion.

-------------

PR: https://git.openjdk.java.net/jdk/pull/498



More information about the build-dev mailing list