Why the lambda expression does not write `.class`, but the inner class do

public static void main(String[] args) {

    Comparator<String> comparator = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return Integer.compare(o1.length(), o2.length());
        }
    };

    Comparator<String> comparator1 = (String a, String b) -> {
        return Integer.compare(a.length(), b.length());
    };


    Comparator<String> comparator2 = Comparator.comparing(String::length);

}

class file: LambdaAndAnonymousInner $ 1.class and LambdaAndAnonymousInner.class

LambdaAndAnonymousInner $ 1.class comparator

comparator1and comparator2does not write a .classfile

I wonder why this happened.

+4
source share
1 answer

This is because lambdas is called dynamically.

Please note the following: http://wiki.jvmlangsummit.com/images/1/1e/2011_Goetz_Lambda.pdf

+5
source

Source: https://habr.com/ru/post/1677730/


All Articles