日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java记录目录树_Java记录

發(fā)布時(shí)間:2023/12/3 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java记录目录树_Java记录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java記錄目錄樹

https://openjdk.java.net/jeps/359概述了Java的新功能,該功能可能會/將在某些將來的Java版本中實(shí)現(xiàn)。 JEP建議使用一種新的“類別”:記錄。 JEP中的示例內(nèi)容如下:

record Range( int lo, int hi) { public Range { if (lo > hi) /* referring here to the implicit constructor parameters */ throw new IllegalArgumentException(String.format( "(%d,%d)" , lo, hi)); } }

本質(zhì)上,一條記錄將是一個(gè)類,該類只打算在構(gòu)造函數(shù)中設(shè)置final字段。 到今天為止,JEP還允許類具有的任何其他成員,但實(shí)際上,一條記錄是一條記錄,是純數(shù)據(jù),其核心可能沒有功能。 記錄的描述簡短而切入點(diǎn),并且消除了許多我們需要用Java 13或更少版本編碼此類或?qū)⒁獙?shí)現(xiàn)的版本記錄的樣板。 上面使用常規(guī)Java的代碼如下所示:

public class Range { final int lo; final int hi; public Range( int lo, int hi) { if (lo > hi) /* referring here to the implicit constructor parameters */ throw new IllegalArgumentException(String.format( "(%d,%d)" , lo, hi)); this .lo = lo; this .hi = hi; } }

考慮到我的Java :: Geci代碼生成項(xiàng)目,這對于代碼生成器來說是一個(gè)巨大的挑戰(zhàn),它彌合了當(dāng)今與所有功能在所有生產(chǎn)平臺上都可用的那一天之間的差距。

因此,我開始考慮如何開發(fā)此生成器,并且遇到了一些問題。 Java :: Geci框架只能將可編譯項(xiàng)目轉(zhuǎn)換為另一個(gè)可編譯項(xiàng)目。 它不能像將不完整的源代碼轉(zhuǎn)換為完整版本的其他代碼生成器那樣工作,該源代碼無法將不完整的源代碼(未經(jīng)代碼生成器的修改而無法編譯)。 這是因?yàn)镴ava :: Geci在測試階段起作用。 為了進(jìn)入測試階段,必須先編譯代碼。 這是一個(gè)眾所周知的折衷方案,是一項(xiàng)設(shè)計(jì)決策。 在大多數(shù)情況下,當(dāng)Java :: Geci有用時(shí),這很容易解決。 另一方面,我們得到的好處是,生成器不需要配置管理,例如讀取和解釋屬性或XML文件。 它們僅提供API,并且從測試中調(diào)用它們的代碼通過它配置生成器。 最大的優(yōu)點(diǎn)是,您甚至可以生成器調(diào)用的方法引用,lambda或?qū)ο髮?shí)例的形式提供回調(diào),以便這些生成器在其工作的某些方面可以具有完全開放的結(jié)構(gòu)。

為什么在這種情況下如此重要? 記錄生成非常簡單,不需要任何復(fù)雜的配置,事實(shí)上,它根本不需要任何配置。 另一方面,可compilable -> compilable compilable -> compilable限制正在影響它。 如果您開始使用Java 8和Java :: Geci創(chuàng)建記錄,那么您的手動代碼將如下所示:

@Geci ( "record" ) public class Range { final int lo; final int hi; }

這不會編譯,因?yàn)樵诖a生成開始之前的第一次編譯時(shí),默認(rèn)構(gòu)造函數(shù)不會初始化字段。 因此,這些字段不能為final :

@Geci ( "record" ) public class Range { int lo; int hi; }

運(yùn)行發(fā)電機(jī),我們將獲得

package javax0.geci.tests.record; import javax0.geci.annotations.Geci; @Geci ( "record" ) public final class Range { final int lo; final int hi; //<editor-fold id="record"> public Range( final int lo, final int hi) { this .lo = lo; this .hi = hi; } public int getLo() { return lo; } public int getHi() { return hi; } @Override public int hashCode() { return java.util.Objects.hash(lo, hi); } @Override public boolean equals(Object o) { if ( this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; Range that = (Range) o; return java.util.Objects.equals(that.lo, lo) && java.util.Objects.equals(that.hi, hi); } //</editor-fold> }

這個(gè)生成器實(shí)際上所做的是

  • 它生成構(gòu)造函數(shù)
  • 將JEP的要求將類和字段轉(zhuǎn)換為final
  • 生成字段的吸氣劑
  • 為該類生成equals()和hashCode()方法

如果該類的void方法與該類具有相同的名稱(盡管不區(qū)分大小寫),例如:

public void Range( double hi, long lo) { if (lo > hi) /* referring here to the implicit constructor parameters */ throw new IllegalArgumentException(String.format( "(%d,%d)" , lo, hi)); }

然后發(fā)電機(jī)將

  • 從生成的構(gòu)造函數(shù)中調(diào)用該方法,
  • 修改方法的參數(shù)列表以匹配當(dāng)前字段列表。
public void Range( final int lo, final int hi) { if (lo > hi) /* referring here to the implicit constructor parameters */ throw new IllegalArgumentException(String.format( "(%d,%d)" , lo, hi)); } //<editor-fold id="record"> public Range( final int lo, final int hi) { Range(lo, hi); this .lo = lo; this .hi = hi; }

請注意,這種生成方法嘗試表現(xiàn)出JEP中建議的最接近實(shí)際record的可能,并生成可立即轉(zhuǎn)換為新語法的代碼。 這就是驗(yàn)證器方法必須與類具有相同名稱的原因。 當(dāng)轉(zhuǎn)換為真實(shí)記錄時(shí),所有要做的就是刪除將方法轉(zhuǎn)換為構(gòu)造函數(shù)的void關(guān)鍵字,刪除參數(shù)列表,因?yàn)樗鼘㈦[含在JEP中定義,并刪除編輯器折疊之間的所有生成代碼。 (也在首次執(zhí)行生成器時(shí)自動生成)。

手動輸入的代碼的修改是Java :: Geci的新功能,它是由Record生成器的需要觸發(fā)的,旨在克服可compilable -&gt; compilable的缺點(diǎn)compilable -&gt; compilable compilable -&gt; compilable限制。 后續(xù)文章中將詳細(xì)介紹Java 1.:Geci的下一個(gè)1.3.0版本中提供的生成器如何使用此功能。

帶走

本文的重點(diǎn)是您甚至可以在Java記錄可用之前將Java記錄與Java 8、9一起使用。

翻譯自: https://www.javacodegeeks.com/2019/10/java-record.html

java記錄目錄樹

總結(jié)

以上是生活随笔為你收集整理的java记录目录树_Java记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。