为什么很多公司选择不升级JDK版本,仍然使用JDK8?
1. 8和11,17是LTS版本,即提供长期支持。
2. Oracle官网的Java8 SE版本,是许多小公司和个人最常见的选择。使用这个版本是无比正确的选择,因为众所周知Oracle只开发JDK,却没有应用场景,其非常依赖社区和客户反馈,JDK质量可想而知。选择成熟版本是明智的,小公司往往没有精力维护,有时候也会购买服务。开发时不是只有Java8,它还影响了一系列的中间件和库的选择和版本支持情况。小公司应该选择大公司已经磨练成熟的技术即可。因此Java8不应该看成落后技术,而应该看作对大公司和社区付出高昂成本的劳动成果的坐享其成。
3. Oracle收费和支持问题。JDK8以后版本都是收费的,免费协议在8的较早版本中。
4. BAT等大厂普遍基于OpenJDK,他们有能力维护一个稳定的的内部企业版本,虽然看起来是JDK8,其实这个和外面下载下来的8不是一个东西。 所以,对于不了解的时候不能盲目吐槽不思进取。这些公司的8版本会把到最新Java11,17等版本的性能改进,bug修复,甚至某些特性都回溯合并到自己的8版本上。个别公司也开源了自己维护的版本出来了。比如阿里巴巴的Dragonwell和腾讯的Kona,并提供LTS支持。
接口和抽象类使用的时机
不是非抽象类不可的时候使用接口,抽象类的使用是为了:①编写通用逻辑供子类使用;②负责业务流程的控制;
回答什么时候使用抽象类,最重要的就是这第②点。如果只有①,抽象类可以退化成Utils工具类。如果①和②都不需要,则对可变的pay方法来说,转化成interface是更好的选择。
1 public abstract class Item { 2 3 // 业务流程控制 4 public boolean buy() { 5 if(pay()) { 6 decrementStock(); 7 deliver(); 8 return true; 9 } 10 return false; 11 } 12 13 protected abstract boolean pay() { 14 } 15 16 // 通用逻辑 17 protected void decrementStock() { 18 //.... 19 } 20 21 // 通用逻辑 22 protected void deliver() { 23 // .... 24 } 25 } 26 27 public class ItemByAliPay extends Item { 28 @Override 29 protected boolean pay() { 30 // 调用alipay的接口 31 } 32 } 33 34 public class ItemByWechat extends Item { 35 @Override 36 protected boolean pay() { 37 // 调用weixinPay的接口 38 } 39 }
Comparable 和Comparator接口
实现了Comparable接口的类说明支持排序功能,比如可以添加到具有排序功能的集合。当然还可以使用Collections.sort(collection) 或者Arrays.sort(array)实现排序。
1 package java.lang; 2 import java.util.*; 3 4 public interface Comparable<T> { 5 6 public int compareTo(T o); 7 8 }
实现了Comparator接口的类说明是一个专用比较器,体现了一种策略模式,不改变对象自身而使用一个策略对象来改变它的行为。可以使用Collections.sort(collection, comparator)进行排序。
1 package java.util; 2 public interface Comparator<T> { 3 4 int compare(T o1, T o2); 5 6 boolean equals(Object obj); 7 8 }
Comparable是内部比较器,Comparator是外部比较器。
标签:Java,聊聊,boolean,抽象类,接口,protected,版本,喝杯,public From: https://www.cnblogs.com/RQfreefly/p/17073867.html