java中 Class类的 isSynthetic

package com.fll.test.synthetic;

public interface TestC {

    public Boolean test(String str);

    public static class TestD{}

    class TestE{}

}

 
package com.fll.test.synthetic;

import org.springframework.cglib.proxy.InvocationHandler;
import org.springframework.cglib.proxy.Proxy;

import java.lang.reflect.Method;
import java.util.function.BiConsumer;

public class TestA {

    public void eat(int a){

        switch (a){
            case 1:
                System.out.println("eat 1");
        }

    }


    public String run(){
        return "run";
    }


    public static void main(String[] args) {

        // 用于检查此Class是否为合成类  比如lambda表达式
        //自以为匿名内部类  动态代理  都是合成类 结果只有lambda表达式属于合成类

        //lambda表达式
        BiConsumer<TestA, Integer> eat = TestA::eat;
        eat.accept(new TestA() , 2);
        System.out.println(eat.getClass().isSynthetic());

        TestC testC1 = str -> str.equals("aaa");
        System.out.println(testC1.getClass().isSynthetic());

        //普通类
        boolean synthetic = TestA.class.isSynthetic();
        System.out.println(synthetic);


        //匿名内部类
        TestA testA = new TestA(){};
        System.out.println(testA.getClass().isSynthetic());

        //匿名内部类
        TestC testC2 = new TestC(){
            @Override
            public Boolean test(String str) {
                return null;
            }
        };
        System.out.println(testC2.getClass().isSynthetic());

        // 动态代理
        TestC testC3 = (TestC) Proxy.newProxyInstance(TestA.class.getClassLoader(), new Class[]{TestC.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                return null;
            }
        });
        System.out.println(testC3.getClass().isSynthetic());

        // 静态内部类
        TestC.TestD testD = new TestC.TestD();
        System.out.println(testD.getClass().isSynthetic());

        // 内部类
        TestC.TestE testE = new TestC.TestE();
        System.out.println(testE.getClass().isSynthetic());

    }

}

结果是:

true
true
false
false
false
false
false
false

如果还有其他为 true 的情况 请各位 码友 在评论区告诉我一声 互相学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值