首页 > 编程语言 >一起喝杯咖啡,聊聊关于Java的一些事情

一起喝杯咖啡,聊聊关于Java的一些事情

时间:2023-01-29 21:34:53浏览次数:40  
标签:Java 聊聊 boolean 抽象类 接口 protected 版本 喝杯 public

为什么很多公司选择不升级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

相关文章

  • Java后台如何接收与处理JSON类型数据
    项目开发中偶尔会使用到某个为JSON类型的字段,一个字段中又包含多个其他的字段。这种设计方式是根据实际需要来进行处理的,比如规则可能包含多条,每一条规则又包含多个......
  • 1.Java基础语法
    一、关键字和保留字1.关键字2.保留字二、......
  • JavaScript中实现sleep睡眠函数的几种简单方法(转)
    转自:JavaScript中实现sleep睡眠函数的几种简单方法一.什么是sleep函数?sleep是一种函数,他的作用是使程序暂停指定的时间,起到延时的效果。javascript好像诶呦提供sleep工......
  • Java SE Runtime Environment 6 Update 26
    ​​​​http://download.oracle.com/otn-pub/java/jdk/6u26-b03/jre-6u26-windows-i586.exe​​​​http://download.oracle.com/otn-pub/java/jdk/6u26-b03/jre-6u26-wind......
  • Java中this关键字的作用
    this关键字的作用 1.表示类中的属性2.可以使用this调用本类的构造方法3.this表示当前对象 1.1this调用本类中的属性classPerson{privateStringname;//姓......
  • Java数组
    Java数组数组是相同类型数据的有序集合每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组的声明必须声明数组变量才能在程序中使用。dataTy......
  • Java反射之Field用法
    参考:https://www.cnblogs.com/ldq2016/p/6834643.htmlhttps://www.cnblogs.com/cuglkb/p/8463039.html工具类:publicclassObjectUtils{staticpublicfinalBo......
  • ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观
    前言最近一段时间,我使用​​golang​​开发了一个新的​​ORM​​库。为了让这个库更好用,我比较研究了各语言的主流​​ORM​​库,发现有一些语言的​​ORM​​库确实很好用,......
  • [JPA错误]javax.persistence.EntityNotFoundException: Unable to find xxx
    解决方法:第一种:由于后来加上的实体、对象在之前的数据没有关联上,所以造成脏数据、故根本的解决方法,就是将之前的测试数据删除,重新添加数据就行了第二种:2.如果子表中......
  • 通过执行方法来获得并运行一个 JavaScript 文件
    通过执行方法来获得并运行一个JavaScript文件通过AJAX请求来获得并运行一个JavaScript文件定义和用法getScript()方法通过HTTPGET请求载入并执行JavaScript......