2017-08-31 111 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}