Kotlin學習34-data數據類1

定義如下:與普通類對比學習

//普通類
class NormalClass(val name: String, val age: Int, val sex: Char)
//數據類
data class DataClass(val name: String, val age: Int, val sex: Char)

對應找到java反編譯的代碼路徑:Tool-->Kotlin-->Show Kotlin Bytecode-->Decompile-->DataClass.decompiled.java下關鍵代碼如下:

public final class NormalClass {@NotNullprivate final String name;private final int age;private final char sex;@NotNullpublic final String getName() {return this.name;}public final int getAge() {return this.age;}public final char getSex() {return this.sex;}public NormalClass(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");super();this.name = name;this.age = age;this.sex = sex;}
}
public final class DataClass {@NotNullprivate final String name;private final int age;private final char sex;@NotNullpublic final String getName() {return this.name;}public final int getAge() {return this.age;}public final char getSex() {return this.sex;}public DataClass(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");super();this.name = name;this.age = age;this.sex = sex;}@NotNullpublic final String component1() {return this.name;}public final int component2() {return this.age;}public final char component3() {return this.sex;}@NotNullpublic final DataClass copy(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");return new DataClass(name, age, sex);}// $FF: synthetic methodpublic static DataClass copy$default(DataClass var0, String var1, int var2, char var3, int var4, Object var5) {if ((var4 & 1) != 0) {var1 = var0.name;}if ((var4 & 2) != 0) {var2 = var0.age;}if ((var4 & 4) != 0) {var3 = var0.sex;}return var0.copy(var1, var2, var3);}@NotNullpublic String toString() {return "DataClass(name=" + this.name + ", age=" + this.age + ", sex=" + this.sex + ")";}public int hashCode() {String var10000 = this.name;return ((var10000 != null ? var10000.hashCode() : 0) * 31 + Integer.hashCode(this.age)) * 31 + Character.hashCode(this.sex);}public boolean equals(@Nullable Object var1) {if (this != var1) {if (var1 instanceof DataClass) {DataClass var2 = (DataClass)var1;if (Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age && this.sex == var2.sex) {return true;}}return false;} else {return true;}}
}

對比可知:

普通類:set get 構造

數據類:set get 構造 copy toString hashCode equals? 解構操作component(0..參數個數)個方法

//普通類
class NormalClass(val name: String, val age: Int, val sex: Char)//數據類
data class DataClass(val name: String, val age: Int, val sex: Char)fun main() {val normal1 = NormalClass("張三", 10, '男')val normal2 = NormalClass("張三", 10, '男')val data1 = DataClass("張三", 10, '男')val data2 = DataClass("張三", 10, '男')println("normal1 : $normal1")println("data1 : $data1")println("normal1==normal2: ${normal1 == normal2}")println("normal1.equals(normal2): ${normal1.equals(normal2)}")//equals <==> ==println("data1==data2: ${data1 == data2}")println("data1.equals(data2): ${data1.equals(data2)}") //equals <==> ==
}

結果如下:

注意:copy toString hashCode equals? 解構操作等只管主構造,不管次構造。

? ? ? ? ? 也就是說調用次構造函數的時候不要妄圖使用上面這些重寫的方法,toStirng方法除外。

數據類的使用條件:

條件一:服務器請求回來的響應的 JavaBean LoginResponseBean 基本上可以使用 數據類? ? ? ? 條件二:數據類至少必須有一個參數的主構造函數
條件三:數據類必須有參數, var val 的參數
條件四:數據類不能使用 abstract,open,sealed,inner 等等 修飾 (數據類,數據載入的事情 數據存儲)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 條件五:需要??比較,copy,tostring,解構,等等 這些豐富的功能時,也可以使用數據類

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82614.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

博圖SCL基礎知識-表達式及賦值運算

S7-1200 從 V2.2 版本開始支持 SCL 語言。 語言元素 SCL 除了包含 PLC 的典型元素&#xff08;例如&#xff0c;輸入、輸出、定時器或存儲器位&#xff09;外&#xff0c;還包含高級編程語言表達式、賦值運算和運算符。 程序控制語句 SCL 提供了簡便的指令進行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意義 海思3519V200是一款基于ARM架構的嵌入式芯片,廣泛應用于智能安防、工業控制等領域。在這些應用場景中,對設備的圖形用戶界面(GUI)有著越來越高的要求。Qt5.8.0作為一個功能強大、跨平臺的GUI開發框架,能夠幫助開發者快速開發出美觀、高效的用戶界面。…

msql的樂觀鎖和冪等性問題解決方案

目錄 1、介紹 2、樂觀鎖 2.1、核心思想 2.2、實現方式 1. 使用 version 字段&#xff08;推薦&#xff09; 2. 使用 timestamp 字段 2.3、如何處理沖突 2.4、樂觀鎖局限性 3、冪等性 3.1、什么是冪等性 3.2、樂觀鎖與冪等性的關系 1. 樂觀鎖如何輔助冪等性&#xf…

成都鼎訊--通信信號模擬設備?

在現代電磁通信領域&#xff0c;精準模擬復雜多變的信號環境&#xff0c;是提升通信裝備性能與人員作戰能力的核心命題。成都鼎訊以技術創新為驅動&#xff0c;憑借深厚的研發實力&#xff0c;重磅推出通信信號模擬設備&#xff0c;以前所未有的強大功能與卓越性能&#xff0c;…

C# Windows Forms應用程序-003

目錄 項目結構 命名空間和類定義 主要控件 GroupBox 控件 Label 控件 TextBox 控件 Button 控件 OpenFileDialog 控件 方法說明 構造函數 Form1() Dispose(bool disposing) Main() InitializeComponent() button1_Click(object sender, System.EventArgs e) but…

【C/C++】死鎖的四大條件與預防策略詳解

文章目錄 死鎖的四大條件與預防策略詳解一、死鎖的產生條件&#xff08;四個必要條件&#xff09;二、代碼示例三、死鎖的預防手段&#xff08;以 C/C 為例&#xff09;1. 破壞“循環等待” —— 統一加鎖順序&#xff08;推薦&#xff09;2. 使用 std::lock 一次性加多個鎖3. …

Rust編程環境安裝

文章目錄 Rust編程環境安裝一、安裝準備二、安裝步驟對于Linux/macOS用戶對于Windows用戶 三、驗證安裝四、環境配置檢查五、工具鏈管理六、附加功能七、常見問題處理八、編輯器支持九、其他 Rust編程環境安裝 一、安裝準備 1. 支持系統&#xff1a;Windows/Linux/macOS 2. 所…

OpenHarmony平臺驅動使用(五),HDMI

OpenHarmony平臺驅動使用&#xff08;五&#xff09; HDMI 概述 功能簡介 HDMI&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;即高清多媒體接口&#xff0c;主要用于DVD、機頂盒等音視頻Source到TV、顯示器等Sink設備的傳輸。 HDMI以主從方式工…

【Git】Commit Hash vs Change-Id

文章目錄 1、Commit 號2、Change-Id 號3、區別與聯系4、實際場景示例5、為什么需要兩者&#xff1f;6、總結附錄——Gerrit 在 Git 和代碼審查工具&#xff08;如 Gerrit&#xff09;中&#xff0c;Commit 號&#xff08;Commit Hash&#xff09; 和 Change-Id 號 是兩個不同的…

leetcode hot100刷題日記——21.不同路徑

和20題一樣的思路link 題解&#xff1a; class Solution { public:int dfs(int i,int j,vector<vector<int>>&memo){//超過了邊界&#xff0c;return 0if(i<0||j<0){return 0;}//從&#xff08;0&#xff0c;0&#xff09;到&#xff08;0&#xff0c;0…

day2 MySQL表數據操作

一&#xff1a;數據操作 注&#xff1a;在編寫MySQL代碼時可以不用區分大小寫 1.查看表結構 desc 表名; -- 查看表中的字段類型&#xff0c;長度&#xff0c;約束。 2.字段的增加 AFTER table 表名 add 字段名 數據類型; -- 默認末尾添加 after table 表名 add 字段名 …

GitAny - 無需登入的 GitHub 最新倉庫檢索工具

地址&#xff1a;https://github.com/MartinxMax/gitany GitAny - 無需登入的 GitHub 專案搜尋工具 GitAny 是一款基於 Python 的工具&#xff0c;允許你在無需登入的情況下搜尋當天最新的 GitHub 專案。它支援模糊搜尋、條件篩選以及倉庫資料的視覺化分析。 安裝依賴 $ pip…

格恩朗金屬管浮子流量計 高精度測量的不二之選?

在流量測量的復雜領域&#xff0c;精度就是生命線&#xff0c;直接關乎生產的穩定性、產品的質量以及資源的合理利用。大連格恩朗品牌的金屬管浮子流量計&#xff0c;憑借其卓越的精度表現&#xff0c;成為各行業在流量測量時的最佳之選。? 格恩朗金屬管浮子流量計運用經典的可…

【R語言編程繪圖-箱線圖】

基本箱線圖繪制 使用ggplot2繪制箱線圖的核心函數是geom_boxplot()。以下是一個基礎示例&#xff0c;展示如何用iris數據集繪制不同物種&#xff08;Species&#xff09;的萼片長度&#xff08;Sepal.Length&#xff09;分布&#xff1a; library(ggplot2) ggplot(iris, aes(…

深度學習能取代機器學習嗎?

在人工智能領域&#xff0c;“機器學習”和“深度學習”這兩個詞經常被混為一談。很多新手甚至以為只要跟 AI 有關的任務&#xff0c;都該用深度學習。但其實&#xff0c;它們并不是誰強誰弱的關系&#xff0c;而是適合不同場景的工具。 這篇文章就來幫你理清楚&#xff1a; 機…

UPS的工作原理和UPS系統中旁路的作用

UPS&#xff08;不間斷電源&#xff09;根據工作原理和適用場景的不同&#xff0c;主要分為以下三種類型&#xff0c;每種類型的特點和適用場景如下&#xff1a; 1. 后備式UPS&#xff08;Offline/Standby UPS&#xff09; 工作原理&#xff1a; 正常供電時&#xff0c;負載直接…

一級菜單401問題

正常代碼生成的前后臺文件&#xff0c;菜單類型是一級標題&#xff0c; 菜單路徑和前端組件的地址都正常寫的:/projects/xxx/xxx/xxx/XxxList 其他生成的新列表都能點進去&#xff0c;只有這個點進去就是顯示空白的像首頁那個頁面一樣&#xff0c; 問題就出現在我第一次建這…

ROS2 robot控制學習(一)

controller_position.yaml使用說明 ROS 2 的 controller_manager 用途典型工作流程示例關鍵服務與話題擴展功能JointTrajectoryController 參數詳解基本參數軌跡參數插值參數前饋控制代碼示例動態參數調試參數ForwardCommandController 概述參數解釋`joints``interface``allow_…

LightGBM的python實現及參數優化

文章目錄 1. LightGBM模型參數介紹2. 核心優勢3. python實現LightGBM3.1 基礎實現3.1.1 Scikit-learn接口示例3.1.2 Python API示例 3.2 模型調優3.2.1 GridSearchCV簡介3.2.2 LightGBM超參調優3.2.3 GridSearchCV尋優結果 在之前的文章 Boosting算法【AdaBoost、GBDT 、XGBoo…

Map集合(雙列集合)

Map結合也稱為“鍵值對集合”&#xff0c;格式&#xff1a;{key1value1&#xff0c;key2value2....} Map集合的特點&#xff1a; 鍵唯一&#xff1a;在Map集合中&#xff0c;鍵&#xff08;key&#xff09;是唯一的&#xff0c;不能有重復的鍵。如果嘗試插入一個已經存在的鍵…