On Mon, 21 Feb 2022 12:16:53 GMT, Andrey Turbanov <aturba...@openjdk.org> wrote:

>> I've stared at the javadoc for Class.isAssignableFrom and Class.isInstance 
>> and if a non-null instance is used to get a non-null class they are PROBABLY 
>> the same but it is far from clear. The implementations of both are at least 
>> native and may be instrinsicified. The doc for Class.isAssignableFrom cites 
>> JLS 5.1.4 which in what I found is about primitives so I suspect it is 
>> woefully out of date 
>> https://docs.oracle.com/javase/specs/jls/se17/html/jls-5.html#jls-5.1.4
>> 
>> What client tests have you run that touch the code you are changing ?
>> 
>> In short I see insufficient value in the changes here and would prefer you 
>> drop the client part so I don't have to worry about it.
>
>>In short I see insufficient value in the changes here and would prefer you 
>>drop the client part so I don't have to worry about it.
> 
> I think, usage of `isInstance` is much clear for most java developers. 
> Everyone knows about java _instanceof_ operator. And `isInstance` method 
> javadoc is very straight forward: `This method is the dynamic equivalent of 
> the Java language instanceof operator.`
> 
> Method `isAssignableFrom` is opposite: it brings unnecessary complexity in 
> the code. And it's easy to confuse orders of parameters. Even JBS confirms 
> that:
> 1. [Wrong isAssignableFrom test when adding Principal to Subject 
> ](https://bugs.openjdk.java.net/browse/JDK-8034820)
> 2. [isAssignableFrom checks in KeyFactorySpi.engineGetKeySpec appear to be 
> backwards](https://bugs.openjdk.java.net/browse/JDK-8254717)
> 3. [isAssignableFrom checks in AlgorithmParametersSpi.engineGetParameterSpec 
> appear to be backwards](https://bugs.openjdk.java.net/browse/JDK-8279800)
> 
> So, it gives all 3 points to prefer isInstance method: it's shorter, it's 
> clearer for most java developers, it's faster.

> @turbanoff
> > Method `isAssignableFrom` is opposite: it brings unnecessary complexity in 
> > the code. And it's easy to confuse orders of parameters. Even JBS confirms 
> > that:
> 
> Maybe we should add `Class::isSubclassOf(Class<?> that)` that performs 
> `that.isAssignableFrom(this)`:

I have opened [JI‑9073064](https://bugs.openjdk.java.net/browse/JI-9073064 
"[JI‑9073064] Add the method `Class::isSublassOf(Class<?>)` to 
`java.lang.Class` that does the inverse of `Class::isAssignableFrom`") for this.

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

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

Reply via email to