溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中怎么自動(dòng)填充SQL語句的公共字段

發(fā)布時(shí)間:2021-07-24 16:05:52 來源:億速云 閱讀:223 作者:Leah 欄目:數(shù)據(jù)庫

本篇文章為大家展示了Java中怎么自動(dòng)填充SQL語句的公共字段,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

比如下面這些:

Java中怎么自動(dòng)填充SQL語句的公共字段

1、使用對(duì)比

接下來我們就使用對(duì)比的方式,來體會(huì)一下 var 的作用。

場景一:定義字符串

舊寫法:

String str = "Hello, Java.";

新寫法:

var s = "Hello, Java.";

PS:這里的舊寫法指的是 JDK 10 之前的版本,而新寫法指的是 JDK 10 以后(包含 JDK 10)的版本。

場景二:數(shù)值相加

舊寫法:

int num1 = 111; double num2 = 555.666d; double num3 = num1 + num2; System.out.println(num3);

PS:當(dāng)遇到不同類型相加時(shí)(int+ double)會(huì)發(fā)生數(shù)據(jù)類型向上轉(zhuǎn)型,因此 num3 就會(huì)升級(jí)為 double 類型。

新寫法:

var n1 = 111L; var n2 = 555.666; var n3 = n1 + n2; System.out.println(n3);

場景三:集合

舊寫法:

List<Object> list = new ArrayList<>(); list.add("Hello"); list.add("Java");

新寫法:

var list = new ArrayList<>(); list.add("Hello"); list.add("Java");

場景四:循環(huán)

舊寫法:

for (Object item : list) {     System.out.println("item:" + item); } for (int i = 0; i < 10; i++) {     // do something... }

新寫法:

for (var item : list) {     System.out.println("item:" + item); } for (var i = 0; i < 10; i++) {     // do something... }

場景五:配合 Lambda 使用

舊寫法:

List<Object> flist = list.stream().filter(v ->                 v.equals("Java")).collect(Collectors.toList()); System.out.println(flist);

新寫法:

var flist = list.stream().filter(v ->              v.equals("Java")).collect(Collectors.toList()); System.out.println(flist);

2、優(yōu)點(diǎn)分析

通過上面的示例我們可以看出, var 具備兩個(gè)明顯的優(yōu)點(diǎn):提高了代碼的可讀性和命名對(duì)齊。

① 提高了可讀性

我們?cè)跊]有使用 var 之前,如果類型的名稱很長就會(huì)出現(xiàn)下面的這種情況:

InternationalCustomerOrderProcessor<AnonymousCustomer, SimpleOrder<Book>> orderProcessor =      createInternationalOrderProcessor(customer, order);

當(dāng)限定每行不能超過 150 個(gè)字符的話,變量名就會(huì)被推到下一行顯示,這樣整個(gè)代碼的可讀性就變得很低。但當(dāng)我們使用了 var  之后,代碼就變成了這樣:

var orderProcessor = createInternationalOrderProcessor(customer, order);

從上述的代碼可以看出,當(dāng)類型越長時(shí),var(可讀性)的價(jià)值就越大。

② 命名對(duì)齊

在不使用 var  時(shí),當(dāng)遇到下面這種情況,代碼就是這樣的:

// 顯式類型 No no = new No(); AmountIncrease<BigDecimal> more = new BigDecimalAmountIncrease(); HorizontalConnection<LinePosition, LinePosition> jumping =   new HorizontalLinePositionConnection(); Variable variable = new Constant(6); List<String> names = List.of("Java", "中文社群");

在使用了 var 之后,代碼是這樣的:

var no = new No(); var more = new BigDecimalAmountIncrease(); var jumping = new HorizontalLinePositionConnection(); var variable = new Constant(6); var names = List.of("Java", "中文社群");

從上述代碼可以看出使用了 var 之后,命名對(duì)齊了,整個(gè)代碼也變得更優(yōu)雅了。

3、使用規(guī)則 & 反例

var 的實(shí)現(xiàn)來自于 JEP 286 (改善提議 286),詳情地址  :http://openjdk.java.net/jeps/286

從 JEP 286 的標(biāo)題“局部變量類型推斷”可以看出,var  只能用于局部變量聲明,也就是說 var 必須滿足以下條件:

  • 它只能用于局部變量上;

  • 聲明時(shí)必須初始化;

  • 不能用作方法參數(shù)和全局變量(類變量)。

PS:因?yàn)?var 的實(shí)現(xiàn)必須根據(jù)等會(huì)右邊的代碼進(jìn)行類型推斷,因此它不能被賦值 null  或不被初始化。

反例一:未初始化和賦值 null


Java中怎么自動(dòng)填充SQL語句的公共字段

Java中怎么自動(dòng)填充SQL語句的公共字段

反例二:中途類型更改

Java中怎么自動(dòng)填充SQL語句的公共字段

反例三:全局變量

Java中怎么自動(dòng)填充SQL語句的公共字段

反例四:作為返回值

Java中怎么自動(dòng)填充SQL語句的公共字段

4、原理分析

經(jīng)過前面的使用我們對(duì)  var 已經(jīng)有了初步的認(rèn)識(shí),但 var 的實(shí)現(xiàn)原理是什么呢?

為了搞清楚它的原理,我們對(duì)下面的代碼進(jìn)行了編譯(使用命令 javac  MainTest.java):

Java中怎么自動(dòng)填充SQL語句的公共字段

然后我們?cè)儆梅淳幾g工具打開被編譯的類發(fā)現(xiàn):var 竟然被替換成一個(gè)個(gè)確定的數(shù)據(jù)類型了,如下圖所示:

Java中怎么自動(dòng)填充SQL語句的公共字段

由此我們可以得出結(jié)論:var  關(guān)鍵字的實(shí)現(xiàn)和它的名字密切相關(guān), var 只是局部類型推斷,它只會(huì)在 Java 編碼期和編譯期有效,當(dāng)類被編譯為 class 文件時(shí),var  就會(huì)變成一個(gè)個(gè)確定的數(shù)據(jù)類型(通過推斷得出)。 所以我們可以把 var 通俗的理解為 Java 的語法糖,使用它可以讓我們快速優(yōu)雅的實(shí)現(xiàn)業(yè)務(wù)代碼,但 var  在字節(jié)碼層面是不存在的。

上述內(nèi)容就是Java中怎么自動(dòng)填充SQL語句的公共字段,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI