【问题标题】:Property getter or setter expected in KotlinKotlin 中预期的属性 getter 或 setter
【发布时间】:2017-05-31 06:53:20
【问题描述】:

我正在从官方文档中学习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 类中收到此错误:

需要属性获取器或设置器

b: int; 行内var a: Int, b: Int;

【问题讨论】:

标签: java android kotlin


【解决方案1】:
var a: Int, b: Int;

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

var a: Int
var b: Int

相反。 Kotlin 人只是发现“int a, b, ..”的 C/java 实践是他们希望在 Kotlin 中支持的东西。

【讨论】:

  • 变量必须被初始化。这个语句会有编译时错误。
  • 试试把你的代码放到IDE里你就知道了。它给出了编译时错误Property must be initialised
  • 我正在使用带有最新 kotlin 1.1.2-4 的 Android Studio 3.0,它给出了上述编译时错误。
  • 你的代码不是我在说的。再次:像 OP 一样使用 Sum 类。因为他作为初始化这两个字段的演员!对不起,那是误导。仅仅拥有Sum { a b } 当然是行不通的。但是与 ctor 一起使用效果很好!
【解决方案2】:

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

如果只有一个,请为constructor 写短格式。

如果类中有属性,可以使用valvarconstructor中定义。

如下使用:

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

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

请阅读Basic Syntax of Kotlin

【讨论】:

    【解决方案3】:

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

    var a: Int
    var b: Int
    

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

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

    【讨论】:

      【解决方案4】:

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

      class Sum (var a: Int,var b: Int){
      
          fun add(): Int= a + b //you can return the results directly.
      }
      

      您可以使用下面的 main 测试您的代码。

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

      【讨论】:

        【解决方案5】:

        首先,您必须将属性声明放在​​不同的行中。您可以在此处参考this thread,其中 JetBrains 的工程师 yole 指出:

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

        一旦在单独的行上完成了属性声明,您应该没有问题,因为 kotlin 会在内部生成默认的 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-20
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          相关资源
          最近更新 更多