我正在学习kotlin,我想找出如何从Java到kotlin实施以下代码:
private Question[] questions = new Question[] {
new Question(R.string.question_a, true)
new Question(R.string.question_b, false)
};
public class Question {
private int resultId;
private boolean answerT;
public Question(int resId, boolean theAnswer) {
resultId = resId;
answerT = theAnswer'
}
}
kotlin:
class Question {
private var resultId:Int = 0
private var answerT:Boolean = false
fun Question(resId:Int, theAnswer:Boolean) {
resultId = resId
answerT = theAnswer
}
}
....
private val questions:List<Question> {
Question(R.string.question_a, true),
Question(R.string.question_b, false)
}
我不确定如何在Kotlin中初始化。
答案 0 :(得分:2)
您可以使用listOf
方法:
private val questions: List<Question> = listOf(
Question(R.string.question_a, true),
Question(R.string.question_b, false))
答案 1 :(得分:2)
首先,您正在使用Java样式的构造函数。 Kotlin构造函数用constructor
关键字表示,或使用主构造函数(类名后的括号)表示。 fun ClassName
并不是在Kotlin中声明构造函数的方式。
我之所以指出这一点,是因为如果没有正确的构造函数,您将无法正确初始化类。
您有两个选择:首先是使用辅助构造函数:
constructor(resId: Int, theAnswer: Boolean) {
resultId = resId
answerT = theAnswer
}
第二个是使用主要的:
class Question(var resId: Int, var theAnswer: Boolean) { // these might be val instead; change these if you don't change the vars. you can also remove the brackets if you don't have a class body.
}
在主要构造函数中使用var
或val
也会为类声明它们。如果您不使用var
或val
,则它们仅在init
块中可用,或仅用于变量初始化(直到完成类的初始化为止,就像在构造函数中一样) )。您可以使用var
或val
进行比较,也可以添加this.someField = someField
,在没有构造函数的情况下,它只是不使用。
还请注意,如果存在二级构造函数,则必须调用二级构造函数。对于某些类,您还需要主要的构造函数,这些类需要传递无法直接初始化的特定字段,这是因为它需要特定的实例才能工作,或者是抽象类或接口的单例实现。
至于列表,取决于您的操作方式。您的Java代码使用数组,而不是列表。但是,对于列表,您使用listOf(items)
;对于数组,您可以使用arrayOf
。 arrayOf()
的工作原理与listOf
类似,但它返回的是Question[]
,而不是List<Question>
。列表(或数组)的正确初始化是这样的:
val问题= listOf(Question(R.string.question_a,true),...)
listOf
带有项的vararg参数,因此您还可以创建类似这样的空列表或数组(尽管对于空数组而言,这毫无意义)。
类型也会被自动推断,因此您无需显式键入: List<Question>
或listOf<Question>(...)
。如果不传递任何参数,则需要显式声明它们。
如果您愿意,也可以选择手动添加。对于一个实例,您可以直接初始化列表,并在其上调用.add
。
答案 2 :(得分:0)
您为什么不能选择enum class
?
enum class Question(val resultId:Int, val answerT:Boolean) {
A(R.string.question_a, true),
B(R.string.question_b, false)
}
或Kotlin的等效代码(我能想到)
class Question(val resultId:Int, val answerT:Boolean)
val questionList = listOf(Question(R.string.question_a,true), Question(R.string.question_b, false))