Java Kotlin中数据类中的私有成员变量
我是kotlin的新手,当我阅读kotlin中的数据类时,我发现了这些代码。这基本上是java模型类和kotlin数据类之间的比较,在那里,wriiten认为这两个代码都执行相同的任务 代码1Java Kotlin中数据类中的私有成员变量,java,android,kotlin,kotlin-android-extensions,Java,Android,Kotlin,Kotlin Android Extensions,我是kotlin的新手,当我阅读kotlin中的数据类时,我发现了这些代码。这基本上是java模型类和kotlin数据类之间的比较,在那里,wriiten认为这两个代码都执行相同的任务 代码1 public class VideoGame { private String name; private String publisher; private int reviewScore; public VideoGame(String name, String publisher, int re
public class VideoGame {
private String name;
private String publisher;
private int reviewScore;
public VideoGame(String name, String publisher, int reviewScore) {
this.name = name;
this.publisher = publisher;
this.reviewScore = reviewScore;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getReviewScore() {
return reviewScore;
}
public void setReviewScore(int reviewScore) {
this.reviewScore = reviewScore;
}}
代码2
data class VideoGame(val name: String, val publisher: String, var reviewScore: Int)
我的问题是,在数据类中,所有变量都是公共的,而不是私有的,任何人都可以借助该类的对象直接访问该变量,但在java代码中,所有变量都是私有的,这就是为什么我们必须为这些成员变量编写getter和setter,如果它是公共的,则不需要getter和setter。那么这些代码是如何相同的呢?数据类的主要用途是简化编写工作 如果您进入IDE并编写
视频游戏
课程:
data-class视频游戏(val-name:String,val-publisher:String,var-reviewScore:Int)
然后反编译它:
IDE工具栏>工具>Kotlin>显示Kotlin字节码>反编译
你得到这个:
@元数据(
mv={1,1,16},
bv={1,0,3},
k=1,
d1={“\u0000\”\\n\n\u0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 u0012\u0006\u0010\u0005\u001a\u00020\u0006\u0006\u0002\u0010\u0007J\t\u0010\u0010\u0010\U0000\U0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20\u0006HÆ\u0001J\u0013\u0010\u0013\u001a\u00020\u00142\b\u0010\u0015\uu0004\u0004\u0004\u0004\u0004\u0018\u0010\u0010\u0010\u0016\u0016\u0016\u00010\u00020\u00010\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0010\u0010\u0010\u0016\u0016\u0016\u00010\u00010\u00010\u00010\u00010\u00010\u00020\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\U0\tR\u001a\u0010\u0005\u001a\u00020\u0006X\u0086\u000e\u0006\u000e\n\u0000\u001a\u0004\b\u000b\u0010\f\“\u0004\b\r\u0010\u000e¨\u0006\u0018”},
d2={“Lcom/yourpackage/VideoGame;”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”(Ljava/lang/String;Ljava/lang/String;I)V、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、
)
公开期末课电子游戏{
@NotNull
私有最终字符串名;
@NotNull
私有最终字符串发布器;
私人int reviewScore;
@NotNull
公共最终字符串getName(){
返回此.name;
}
@NotNull
公共最终字符串getPublisher(){
返回此.publisher;
}
公共最终int GetReviewCore(){
返回此.reviewScore;
}
公共最终作废SetReviewCore(int var1){
this.reviewScore=var1;
}
公共视频游戏(@NotNull字符串名称,@NotNull字符串发布者,int-reviewScore){
Intrinsics.checkParametersNotNull(名称,“名称”);
Intrinsics.checkParameterisNotFull(发布者,“发布者”);
超级();
this.name=名称;
this.publisher=publisher;
this.reviewScore=reviewScore;
}
@NotNull
公共最终字符串组件1(){
返回此.name;
}
@NotNull
公共最终字符串组件2(){
返回此.publisher;
}
公共最终整型组件3(){
返回此.reviewScore;
}
@NotNull
公开最终视频游戏副本(@NotNull String name、@NotNull String publisher、int reviewScore){
Intrinsics.checkParametersNotNull(名称,“名称”);
Intrinsics.checkParameterisNotFull(发布者,“发布者”);
返回新的视频游戏(名称、出版商、ReviewCore);
}
//$FF:合成法
公共静态视频游戏副本$default(视频游戏var0、字符串var1、字符串var2、int var3、int var4、对象var5){
如果((变量4和1)!=0){
var1=var0.name;
}
如果((变量4和2)!=0){
var2=var0.0;
}
如果((变量4和4)!=0){
var3=var0.reviewScore;
}
返回var0.copy(var1,var2,var3);
}
@NotNull
公共字符串toString(){
return“VideoGame(name=“+this.name+”,publisher=“+this.publisher+”,reviewScore=“+this.reviewScore+”);
}
公共int hashCode(){
字符串var10000=this.name;
int var1=(var10000!=null?var10000.hashCode():0)*31;
字符串var10001=this.publisher;
返回(var1+(var10001!=null?var10001.hashCode():0))*31+this.reviewScore;
}
公共布尔等于(@Nullable Object var1){
if(this!=var1){
if(视频游戏的var1实例){
视频游戏var2=(视频游戏)var1;
if(Intrinsics.areEqual(this.name,var2.name)&&Intrinsics.areEqual(this.publisher,var2.publisher)&&this.reviewScore==var2.reviewScore){
返回true;
}
}
返回false;
}否则{
返回true;
}
}
}
因此,支持字段是私有的。科特林正在为你做所有繁琐繁重的工作。即:
toString的基本实现
等于
hashCode
copy
方法
简化POJO的编写数据类
val