当前位置: 首页 > 面试题库 >

为什么可以在Kotlin的类外部编写函数?

陈康胜
2023-03-14
问题内容

我不明白为什么可以在Kotlin的类外编写函数?这是一个好习惯吗?

例如,在Kotlin中可以在我的MainActivity课外编写一个函数:

fun hello(){}

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        hello()
    }
}

在Java中,这是不可能的!那不是面向对象语言正常工作的方式,对吗?

在文档中,他们讨论了经典函数的 局部 函数和在类或对象内部定义的函数的 成员函数 ,但是他们没有解释何时使用一个或另一个更好。


问题答案:

在Java中,这是不可能的!那不是面向对象语言正常工作的方式,对吗?

稍停片刻,然后重新考虑Java静态方法的性质。类应该是对象的蓝图,描述它们的行为和状态。但是您可以调用静态方法而无需创建任何实例

这如何适应面向对象的情况?静态方法如何“属于”其声明的类?

实际上,静态方法是Java中的一种技巧,它们污染并滥用了类的OOP概念。但是这些年来,您已经习惯了它们,所以您不再有这种感觉了。

从概念上讲,静态方法是顶级函数,Java使用其声明类的名称作为其命名空间。与此相反,Kotlin允许您声明顶级函数,而不会将类误用于命名空间。



 类似资料:
  • 我不明白为什么在Kotlin的类外写函数是可能的?这是个好做法吗?

  • 我试图在外类声明的括号(泛型)中插入一个私有类,并得到下一个错误:“com.example.gridrecyclerview.RecycleViewAdapter。VieHolder在com.example.gridrecyclerview.RecyclViewAdapter中有私有访问权限” 将内部类更改为公共类时,一切正常。谁能给我解释一下这个问题吗。附件代码:

  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 在Kotlin中,您可以创建: 然后可以使用它解析JSON,例如“{n:10}”。在这种情况下,您将有一个对象,从、或接收,它包含以下值:。 在Kotlin+GSON-How to get a emptyList when null for data类中,您可以看到另一个示例。 当您以后尝试使用时,您将在这里得到一个异常::“Kotlin.TypeCastException:null不能被强制转换

  • 代码B是一个定制的回收视图apater,带有单选按钮。 mCustomAdapter 在 Code A 中的 fun methodA() 和 fun methodB() 中都发生了变化,因此 的引用也发生了变化,这意味着 val 属性 mySelectedIndex 从不同的地址获取值。 在我看来,val属性不能更改,为什么应用程序不会导致错误? 代码A 代码B 被改进的 我觉得代码DD和代码EE

  • 问题内容: 我确实阅读了许多讨论内部类的主题,并且给人的印象是内部类可以访问封闭类的变量和方法。在下面的代码中,我有一个外部类和一​​个内部类,在测试类中,我创建了一个外部类的实例,然后从中创建了一个内部类的实例。但是我无法通过内部类引用访问String变量。救命? 问题答案: 内部类可以通过自己的方法访问外部类的方法和属性。看下面的代码: