2022年8月11日 星期四

lambda 的 this (java8 八)

/**
 * 印 this 的時候,會調用 Object.toString()
 * 匿名類別的 this:會先調用自己匿名類別的 toString,沒有才去 Object.toString
 * Lambda 的 this:會先調用「當下」類別的 toString,沒有才去 Object.toString
 */
public class ThisTest {
    Animal a1 = new Animal() {
        @Override
        public void m(String str) {
            System.out.println(this);
        }

//        @Override
//        public String toString() {
//            return "anonymous toString";
//        }
    };

    Animal a2 = s -> System.out.println(this);

//    @Override
//    public String toString() {
//        return "this toString";
//    }

    public static void main(String[] args) {
        ThisTest thisTest = new ThisTest();
        thisTest.a1.m("xxx");
        thisTest.a1.m("aaa");
        thisTest.a2.m("ooo");
        thisTest.a2.m("bbb");
    }

    @FunctionalInterface
    public interface Animal {
        void m(String str);
    }
}


沒有留言:

張貼留言