从源码看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动态代理有几个条件:
类和类、类和接口、接口和接口之间存在一定关系,UML类图中一般会有连线指明它们之间的关系。关系共有六种类型,分别是实现关系、泛化关系、关联关系、依赖关系、聚合关系、组合关系。
下面引用一下别人的图:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
在开发springboot starter的时候发现,如果写完的starter直接导入已有工程有些问题,还是要上传到maven然后通过maven引入比较规范,但是每次通过网页管理上传maven包太过麻烦,所以配置了一下通过idea直接deploy上私有仓库,下面记录一下过程。