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 的情况 请各位 码友 在评论区告诉我一声 互相学习