Hi,

forgive me if this was discussed already, but I found that the implementation 
of hidden classes causes a change in behavior for Class.getCanonicalName().

When using the following example code:

interface Function {
        void doSomething();
}

public class Example {

        public static void main(String[] args) {
                Class<? extends Function> lambdaClass = ((Function) () -> 
{}).getClass();
                String canonicalName = lambdaClass.getCanonicalName();
                System.out.println(canonicalName);
                String name = lambdaClass.getName();
                System.out.println(name);
        }

}

I get the following results:

JDK 14
com.example.demo.Example$$Lambda$14/0x0000000800b66840
com.example.demo.Example$$Lambda$14/0x0000000800b66840

JDK 15
null
com.example.demo.Example$$Lambda$14/0x0000000800b89448

As far as I can tell from the code Lambdas are considered hidden classes now. 
Is that correct?

I guess Class.getName() should be used instead?

Cheers,
Christoph


Reply via email to