2017-08-31 60 views
0

在Java和Android,我们可以这样做:如何在kotlin中“静态”访问类的成员?

public static MyApplication extends Application { 
    private static Context appContext; 

    public void onCreate() { 
     appContext = this; 
    } 

    public static Context getAppContext() { 
     return appContext; 
    } 
} 

,这样,在其他地方,我们可以这样做:

appContext = MyApplication.getAppContext(); 

我们如何在科特林做到这一点?过去一小时左右,我一直在圈圈。

在此先感谢。

//编辑 也许我应该更清楚。我的意思是我们如何在Kotlin中编写上述代码并在Kotlin中使用它。

+0

就叫appContext。我认为Kotlin与外部类一起工作来完成像kotlin这样的调用(但是可能的话在Java字节代码中使用getter)。调用MyApplication。appContext应该足够了 – Zoe

+1

重复的https://stackoverflow.com/questions/40352684/what-is-the-equivalent-of-java-static-methods-in-kotlin? – Xvolks

+0

@Xvolks问题是关于在Java代码中访问一个恰好是私有的静态字段。这不是重复的。 – Zoe

回答

2

我缺的是使用一个初始化块的设置appContext是同伴对象中的关键因素(我已经尝试了伴侣对象路径,但努力实际获得appContext设置)。

见下面的代码:

class MyApplication : Application() { 

    init { 
     appContext = this 
    } 

    companion object { 
     lateinit var appContext: Context 
      private set 
    } 
} 

这是再调用像往常一样通过:

val testContext = MyApplication.appContext 
+1

如果你想让这个类型不可为空,你可以替换'var appContext:Context? ='null',带'lateinit var appContext:Context'。 –

+0

不错的一个!谢谢:)不知道为什么我以前没有尝试过。 –

0

,你可以使用这种方式

companion object{ 
//your static fields 
} 

从科特林==> ClassName.FieldName称之为

把它从Java调用==> ClassName.Companion.getFieldName()

+0

你没有回答这个问题:你如何从静态字段/ getter调用科特林?它不是伴随对象,它起源于Java代码 – Zoe

+0

我叫'appContext = MyApplication.getAppContext();'一个来自Kotlin的静态java getter,它起作用 –

5

在Kotlin中,这被称为“同伴对象”:

class MyApplication: Application { 
    companion object { 
     var appContext: Context? = null 
      private set 
    } 
} 
1

假设你有一些java代码在Android和你想将其转换为kotlin代码:

  1. Visit Link
  2. 找到Convert from java

它帮助我转换java代码我因特网上发现并将其转换为kotlin代码,

可能这个answer不能帮你解决你的问题,但它喔ULD帮助你转换你java知道什么,你不知道如何到做kotlin

0

好像你希望这个类在运行时只有一个对象。这被称为单身人士。有一些建议可以在Java中正确实施。幸运的是科特林允许用户直接在上面范围申报单对象:

val o = object { your attributes and methods here}