从源码看PriorityQueue
add/offer
java.util.PriorityQueue#add
将指定元素插入此优先级队列。
返回:true (由Collection.add指定)
抛出:ClassCastException – 如果根据优先级队列的顺序无法将指定元素与当前在此优先级队列中的元素进行比较
NullPointerException – 如果指定的元素为空
java.util.PriorityQueue#add
将指定元素插入此优先级队列。
返回:true (由Collection.add指定)
抛出:ClassCastException – 如果根据优先级队列的顺序无法将指定元素与当前在此优先级队列中的元素进行比较
NullPointerException – 如果指定的元素为空
implements
1 | public interface User { |
Spring AOP的原理是 JDK 动态代理和CGLIB字节码增强技术,前者需要被代理类实现相应接口,也只有接口中的方法可以被JDK动态代理技术所处理;后者实际上是生成一个子类,来覆盖被代理类,那么父类的final方法就不能代理,因为父类的final方法不能被子类所覆盖。一般而言Spring默认优先使用JDK动态代理技术,只有在被代理类没有实现接口时,才会选择使用CGLIB技术来实现AOP。
CGLib动态代理要点:
注解的声明如下:
{InterfaceModifier} @interface Identifier AnnotationTypeBody
接口修饰符 @interface 注解标识符 注解类型的内容
大家都知道,接口是不能实例化的,除非实现了该接口,那有没有什么办法,不编写实现类,创捷接口实例呢?
答案是有的,通过JDK动态代理,创建JDK动态代理有几个条件: