当前位置: 首页 > 知识库问答 >
问题:

如何在Java中访问Kotlin伴侣对象?

张亦
2023-03-14
class MainApplication : Application() {
    companion object {
        operator fun get(context: Context): MainApplication {
            return context.applicationContext as MainApplication
        }
    }
}
MainApplication application = MainApplication.get(mContext);
Error:(27, 54) error: cannot find symbol method get(Context)

共有1个答案

桓深
2023-03-14

您可以将@jvmstatic注释添加到companion对象中的方法,以使Kotlin生成一个静态方法。

class MainApplication : Application() {
    companion object {
        @JvmStatic fun get(context: Context): MainApplication {
            return context.applicationContext as MainApplication
        }
    }
}

然后您可以像转换到Kotlin之前一样从Java访问它:

MainApplication application = MainApplication.get(mContext);

编辑:我觉得有必要添加一些我最近学到的东西:@jvmstatic实际上不会移动生成方法的位置。它通过在伴生对象上的方法之外为Java生成一个静态方法来复制它。就我个人而言,我认为这不是很好,它可能会根据用例产生一些影响,所以值得了解一些事情。

 类似资料:
  • 我试图在其他类中调用一个类的静态函数,但在kotlin中我不能创建一个静态函数,我必须创建一个伴生对象,在其中我必须定义我的函数,但在这样做的时候我不能访问父类变量,有什么方法可以在kotlin中实现这一点。 我想访问有趣的returnString()类的静态函数,就像我们在java中做的一样,如果有谁已经实现了这一点,请帮助。

  • 带有同伴对象的简单示例类 值测试可以通过访问,但如何从MyClass的实例访问?如果我有,那么我如何从sample访问测试?不正确....有没有办法? Java,C++,python等都有很简单的解决方案...(我将为每个有帮助的is提供代码示例),我认为kotlin会有一个比使用Java更好的解决方案。 对于在没有对象实例(如工厂)的情况下访问类属性,kotlin companion objec

  • 问题内容: 我有这段Java代码: 我想在Kotlin中获得MainActivity对象。自动转换在处中断。 问题答案: 您可以通过使用合格的来获得对Kotlin中对象的引用。例如:

  • 我想知道是否可以在同伴对象中使用类的属性。例如,以贝娄为例: 我不能通过c1或C2调用changeAge()函数。我可以使用changeAge的唯一地方是通过Person1.changeAge(),当Person1还没有用适当的构造函数实例化时。我想知道这些动作是不是有其他的选择,或者是没有,有同伴对象有什么意义呢

  • 我有一个类包含如下所示同伴对象。 我想在运行时修改同伴对象的属性。我将在这个类中添加数百个属性。所以我要做动态。我使用了这个方法,得到如下错误。

  • “伴生对象”的本意是什么?到目前为止,我使用它只是为了在需要时替换Java的。 null 这似乎是一种不正常的做法。有什么更好的办法?