Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在kotlin中编写getter和setter?_Java_Kotlin_Constructor - Fatal编程技术网

Java 如何在kotlin中编写getter和setter?

Java 如何在kotlin中编写getter和setter?,java,kotlin,constructor,Java,Kotlin,Constructor,我对kotlin和构建测验应用程序还不熟悉。我不明白如何将这些java代码写入Kotlin?尤其是接球手和二传手?另外,如何在Kotlin中创建默认构造函数和参数化构造函数 我所做的是: class Question { var question: String var opt1: String var opt2: String var opt3: String var answerno: Int constructor(question: S

我对kotlin和构建测验应用程序还不熟悉。我不明白如何将这些java代码写入Kotlin?尤其是接球手和二传手?另外,如何在Kotlin中创建默认构造函数和参数化构造函数

我所做的是:

class Question {

    var question: String
    var opt1: String
    var opt2: String
    var opt3: String
    var answerno: Int

    constructor(question: String, opt1: String, opt2: String, opt3: String, answerno: Int) {
        this.question = question
        this.answerno = answerno
        this.opt1 = opt1
        this.opt2 = opt2
        this.opt3 = opt3
    }
}
此处的Java代码:

public class Question {
    private String question;
    private String option1;
    private String option2;
    private String option3;
    private int answerNr;
    public Question() {
    }
    public Question(String question, String option1, String option2, String option3, int answerNr) {
        this.question = question;
        this.option1 = option1;
        this.option2 = option2;
        this.option3 = option3;
        this.answerNr = answerNr;
    }
    public String getQuestion() {
        return question;
    }
    public void setQuestion(String question) {
        this.question = question;
    }
    public String getOption1() {
        return option1;
    }
    public void setOption1(String option1) {
        this.option1 = option1;
    }
    public String getOption2() {
        return option2;
    }
    public void setOption2(String option2) {
        this.option2 = option2;
    }
    public String getOption3() {
        return option3;
    }
    public void setOption3(String option3) {
        this.option3 = option3;
    }
    public int getAnswerNr() {
        return answerNr;
    }
    public void setAnswerNr(int answerNr) {
        this.answerNr = answerNr;
    }
}

我建议您阅读kotlin文档来创建一个模型类。这里有一些很好的解释。

看看下面的普通对象类

class Question {
  var question:String
  var option1:String
  var option2:String
  var option3:String
  var answerNr:Int = 0
  constructor() {}
  constructor(question:String, option1:String, option2:String, option3:String, answerNr:Int) {
    this.question = question
    this.option1 = option1
    this.option2 = option2
    this.option3 = option3
    this.answerNr = answerNr
  }
}
如果要查找数据类,请尝试以下方法

data  class Question (
  var question:String,
  var option1:String,
  var option2:String,
  var option3:String,
  var answerNr:Int = 0
) {  
}

我建议您阅读kotlin文档来创建一个模型类。这里有一些很好的解释。

看看下面的普通对象类

class Question {
  var question:String
  var option1:String
  var option2:String
  var option3:String
  var answerNr:Int = 0
  constructor() {}
  constructor(question:String, option1:String, option2:String, option3:String, answerNr:Int) {
    this.question = question
    this.option1 = option1
    this.option2 = option2
    this.option3 = option3
    this.answerNr = answerNr
  }
}
如果要查找数据类,请尝试以下方法

data  class Question (
  var question:String,
  var option1:String,
  var option2:String,
  var option3:String,
  var answerNr:Int = 0
) {  
}

如果您想要与您在这里介绍的Java类中完全相同的结构,那么转换后的解决方案具有所有“nullabilities”:

感谢@gidds指出Kotlin默认情况下为每个类属性生成getter和setter(用于可变属性)

属性不是私有的,并声明为
var
,因为: -(
var
)java代码对每个属性都有getter和setter; -(非私有)getter和setter只返回和设置值,而不更改它们

例如,如果
getQuestion
setQuestion
使用
question
值执行一些计算并返回计算结果,则转换后的类将如下所示:

class Question {
    private var question: String? = null
    var option1: String? = null
    var option2: String? = null
    var option3: String? = null
    var answerNr = 0

    constructor() {}
    constructor(
        question: String?,
        option1: String?,
        option2: String?,
        option3: String?,
        answerNr: Int
    ) {
        this.question = question
        this.option1 = option1
        this.option2 = option2
        this.option3 = option3
        this.answerNr = answerNr
    }

    fun getQuestion(): String {
        return question + "value"
    }

    fun setQuestion(question: String) {
        this.question = question + "value"
    }
}

这是最直接的转换。

如果您想要与您在这里介绍的Java类完全相同的结构,那么转换后的解决方案具有所有“nullabilities”:

get() = field        // getter 
        set(value) {         // setter 
            field = value 
        } 
感谢@gidds指出Kotlin默认情况下为每个类属性生成getter和setter(用于可变属性)

属性不是私有的,并声明为
var
,因为: -(
var
)java代码对每个属性都有getter和setter; -(非私有)getter和setter只返回和设置值,而不更改它们

例如,如果
getQuestion
setQuestion
使用
question
值执行一些计算并返回计算结果,则转换后的类将如下所示:

class Question {
    private var question: String? = null
    var option1: String? = null
    var option2: String? = null
    var option3: String? = null
    var answerNr = 0

    constructor() {}
    constructor(
        question: String?,
        option1: String?,
        option2: String?,
        option3: String?,
        answerNr: Int
    ) {
        this.question = question
        this.option1 = option1
        this.option2 = option2
        this.option3 = option3
        this.answerNr = answerNr
    }

    fun getQuestion(): String {
        return question + "value"
    }

    fun setQuestion(question: String) {
        this.question = question + "value"
    }
}
这是最直接的转换

get() = field        // getter 
        set(value) {         // setter 
            field = value 
        } 
例如:-

例如:-


在kotlin中,getter和setter由编译器自动生成,您可以将所有变量写入构造函数。这将为这里的字段生成所有getter和setter

课堂提问(
问题:字符串
var opt1:字符串
var opt2:字符串
var opt3:字符串
var answerno:Int
)
如果要提供自定义getter或setter,只需在类内创建属性:

课堂提问(
问题:字符串
var opt1:字符串
var opt2:字符串
var opt3:字符串
var answerno:Int
) {
var问题=问题
得到(){
//getter代码(在此处使用字段变量访问此变量)
}
设置(值){
//为字段变量赋值,如'field=value'`
}
}

在kotlin中,getter和setter由编译器自动生成,您可以将所有变量写入构造函数。这将为这里的字段生成所有getter和setter

课堂提问(
问题:字符串
var opt1:字符串
var opt2:字符串
var opt3:字符串
var answerno:Int
)
如果要提供自定义getter或setter,只需在类内创建属性:

课堂提问(
问题:字符串
var opt1:字符串
var opt2:字符串
var opt3:字符串
var answerno:Int
) {
var问题=问题
得到(){
//getter代码(在此处使用字段变量访问此变量)
}
设置(值){
//为字段变量赋值,如'field=value'`
}
}

您可以避免使用getter/setter样板文件

您还可以在中用结构方法替换构造函数。关于这个主题,您可以在“项目1:考虑静态工厂方法而不是构造函数”和

中找到。 另一个有用的数据类特性是。使用它们可以避免创建可变对象。例如,在中使用不可变对象是安全的


您可以避免使用getter/setter样板文件

您还可以在中用结构方法替换构造函数。关于这个主题,您可以在“项目1:考虑静态工厂方法而不是构造函数”和

中找到。 另一个有用的数据类特性是。使用它们可以避免创建可变对象。例如,在中使用不可变对象是安全的


您不需要分配getter setter,因为默认情况下它就在那里。您可以使用
question.option1
访问它们

你可以这样用

class Question(
    var question: String = "default value",
    var option1: String = "default value",
    var option2: String = "default value",
    var option3: String = "default value",
    var answerNr: Int = 0
)

这样可以指定默认值

您不需要分配getter setter,因为默认情况下它就在那里。您可以使用
question.option1
访问它们

你可以这样用

class Question(
    var question: String = "default value",
    var option1: String = "default value",
    var option2: String = "default value",
    var option3: String = "default value",
    var answerNr: Int = 0
)

这样可以指定默认值

您暗示只有数据类会自动生成属性的getter和setter方法,但事实并非如此——在Kotlin中,所有属性都是通过自动生成的getter(和setter,如果是可变的)方法实现的。(对于值对象,出于其他原因使用数据类是个好主意。)感谢您指出这一点。我会纠正那个错误。看来我对Kotlin编译器的工作原理有些误解。谢谢。事实上,在Kotlin中,属性是一个getter(和setter)方法——有些属性根本没有支持字段。在纯Kotlin中,这并不明显,但在Java中是可见的。所以这必须适用于所有课程。谢谢@JeneaVranceanu还有一个疑问,我如何在另一个类中获得这些值?我不确定到底是什么