预计在Kotlin的财产获取者或者设定者

时间:2017-05-31 06:53:21

标签: java android kotlin

我正在从官方文档学习Kotlin,我正在尝试创建一个类来进行算术运算。

class Sum {

    var a: Int, b: Int;

    constructor(a: Int, b: Int) {
        this.a = a
        this.b = b
    }

    fun add(): Int {
        return a + b
    }
}

我有这个类,现在我想创建这个类的对象,如

val sum = Sum(1,2)
Log.d("Sum", sum.add())

我在Sum课程中收到此错误:

  

预期属性getter或setter

b: int;

中的var a: Int, b: Int;上的

5 个答案:

答案 0 :(得分:7)

var a: Int, b: Int;

Kotlin不允许在一行中有多个声明。你必须去:

var a: Int
var b: Int

代替。 Kotlin人员简单地发现“int a,b,..”的C / java实践是他们希望在Kotlin中支持的东西。

答案 1 :(得分:5)

只需在两行中声明变量即可解决您的错误:

var a: Int
var b: Int

但是,建议的方法是将这些变量集成到构造函数中(如果您只想要一个带参数的构造函数):

class Sum(var a: Int, var b: Int) {
    fun add(): Int = a + b
}

答案 2 :(得分:3)

您正在课堂上编写不必要的代码。

如果只有一个,请填写constructor的简短表格。

如果课程中有属性,可以使用constructorvalvar中定义属性。

使用如下:

class Sum (var a: Int,var b: Int){

    fun add(): Int {
        return a + b
    }
}

请阅读Kotlin的{​​{3}}。

答案 3 :(得分:1)

以下代码显示了如何在类中分配和操作变量

class Sum (var a: Int,var b: Int){

    fun add(): Int= a + b //you can return the results directly.
}

您可以使用下面的主要内容测试您的代码。

fun main(args: Array<String>) {
   var s= Sum(1,2)

    print(s.add())
}

答案 4 :(得分:1)

首先,您必须将属性声明放在​​单独的行上。你可以在这里参考this thread,其中JetBrains的工程师yole说:

  

许多Java样式指南都不赞成在同一行声明多个属性,因此我们没有在Kotlin中实现对该属性的支持。

一旦完成了单独行上的属性声明,你应该没有问题,因为kotlin genrates默认的getter和setter内部具有与你的属性相同的可见性。如果您未指定任何可见性修饰符,则默认使用public,这意味着您的声明随处可见。

事实上,Kotlin有一个简洁的语法,用于声明属性并从主构造函数初始化它们(如果你只有一个构造函数,它总是主要的):

  class Sum(var a:Int,var b:Int) {

    fun add(): Int {
        return a + b
    }
}

请参阅https://kotlinlang.org/docs/reference/classes.html

下方链接的官方文档中的构造函数列