Kotlin 带内部类和外部类的括号是什么意思?
为什么在print语句中没有带outer的括号,这是什么意思Kotlin 带内部类和外部类的括号是什么意思?,kotlin,static,inner-classes,parentheses,outer-classes,Kotlin,Static,Inner Classes,Parentheses,Outer Classes,为什么在print语句中没有带outer的括号,这是什么意思 class outer() { var name = "mr X" class nestedclass { var description = "Inside the nested class" var id = 101 fun foo() {
class outer() {
var name = "mr X"
class nestedclass {
var description = "Inside the nested class"
var id = 101
fun foo() {
println("id is $id")
}
}
}
fun main() {
println(outer.nestedclass().description) why there is no () with outer?
outer.nestedclass().foo()
var obj = outer.nestedclass()
obj.foo()
println(obj.description)
}
没有paren,因为它没有创建
outer
的实例
如果nestedclass
是一个内部类,那么每个实例都将与outer
的一个实例相关联,因此您需要在前者之前构造后者。(您可以通过添加参数来实现,如outer().nestedclass()
)
但是它只是一个嵌套类,在outer
的词法范围内定义,但不与实例关联。因此outer.nestedclass
只是类名,您可以直接调用它的构造函数作为outer.nestedclass()
所以这句话:
println(outer.nestedclass().description)
构造outer.nestedclass
的实例,获取其description
属性的值,并将其打印出来
(如果你了解Java,有两个很大的区别需要提及。首先,在Java中,内部类是默认的,你需要指定static
使它们嵌套;但是在Kotlin中,嵌套类是默认的,有一个internal
关键字。其次,Kotlin没有Java的new
关键字来表示常量或者打电话,所以很难发现他们。)
(另外,正如Tenfour04所说,类名以大写字母(又名PascalCase)开头。这使得它们更容易与方法名和其他标识符区分开来——这在camelCase中是常规情况。这个问题是一种情况,在这种情况下,额外的清晰度会有所帮助。)这是不可编译的。你确定Outer没有声明为对象吗?@Tenfour04它在这里编译正常(一旦你注释掉
println()后面的注释
).没关系。我被小写的类名和在手机上阅读的内容吓坏了。当类不遵循Pascal大小写命名约定时,很难发现构造函数调用。@Tenfour04的确!我已经对此评论了很多次了……我们可以设置一个常见问题解答或一些基本编码约定、关于不必要的警告吗思考的使用,铸造和转化之间的区别,以及我们一直在说的其他事情?有时这是因为人们只是在使用了一种有不同习惯的语言之后才开始学习这种语言。