这是一个在括号内包含一些代码(属性)的类的简单示例
class Person(firstName: String) {
....
}
现在这里是一个在括号内包含一些代码(参数)的函数的例子
fun double(x: Int) {
...
}
我知道这是一个基本问题,但作为一个初学者我很困惑。
答案 0 :(得分:9)
将参数传递给函数和构造函数,类具有属性。
示例中Person
类的构造函数只有一个参数,double
函数也是如此。在这种情况下,firstName
参数不属性!
要使其成为属性,您必须声明:
class Person(firstName: String) {
val firstName : String = firstName
}
Kotlin允许此更短,这使得firstName
参数可用作属性:
class Person(val firstName: String)
答案 1 :(得分:0)
属性和参数是不同的想法:
参数:当我们声明任何函数时:
fun sum(a: Int, b: Int): Int {
return a + b
}
具有两个具有Int返回类型的Int参数的函数:
属性和字段:
声明属性
Kotlin
中的类可以包含属性。这些可以使用var
关键字声明为可变,也可以使用val
关键字声明为只读。
class Address {
var name: String = ...
var street: String = ...
var city: String = ...
var state: String? = ...
var zip: String = ...
}
要使用属性,我们只需按名称引用它,就像它是Java中的字段一样:
fun copyAddress(address: Address): Address {
val result = Address() // there's no 'new' keyword in Kotlin
result.name = address.name // accessors are called
result.street = address.street
// ...
return result
}
声明属性的完整语法是:
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
答案 2 :(得分:0)
首先,您的firstName
也是parameter,而不是Person
类中的property。
// v-- a parameter declared on primary constructor
class Person(firstName: String)
您可以在init
块或属性/字段声明中访问primary constructor上声明的参数,例如:
class Person(firstName: String){
val first:String
init{ first=firstName }
}
class Person(firstName: String){
val first:String = firstName
}
class Person(firstName: String){
@JvmField val first:String = firstName
}
将firstName
设为属性,您可以使用关键字val
或var
,例如:
// v--- immutable property
class Person(val firstName: String)
// v--- mutable property
class Person(var firstName: String)
Kotlin属性将生成getter / setter(?)和backing field(?)到java字节代码。以java字节代码为例,给出一个可变属性的例子:
public final class Person{
private String firstName; // backing field
// v--- parameter
public Person(String firstName){ this.firstName = firstName; }
//getter
public final String getFirstName(){ return firstName; }
//setter
public final String setFirstName(String firstName){ this.firstName= firstName; }
}
仅在函数作用域/构造函数作用域中可见的参数,但在主构造函数上声明的参数除外。
注意:参数不可变,如java 有效最终变量/参数,因此您无法重新分配参数在Kotlin,例如:
fun foo(bar:String){
bar = "baz"
// ^--- compile error
}