2017-08-31 8 views
0

、我々はこれを行うことができます:kotlinでクラスのメンバーにアクセスするにはどうすればいいですか? JavaとAndroidので

public static MyApplication extends Application { 
    private static Context appContext; 

    public void onCreate() { 
     appContext = this; 
    } 

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

ように、どこか、私たちはこれを行うことができます:

appContext = MyApplication.getAppContext(); 

を我々はKotlinでこれを行うにはどうすればよいですか?私は過去1時間ほどサークルで回ってきました。

ありがとうございます。

//編集 おそらく私はもっとはっきりしていたはずです。私はKotlinで上記を書いてKotlinで使うことができる方法を意味しました。

+0

:経由これはその後、いつものように呼び出し可能である

class MyApplication : Application() { init { appContext = this } companion object { lateinit var appContext: Context private set } } 

は、以下のコードを参照してください。私は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を取得するのに苦労していました)。ただ、AppContextをを呼び出す

val testContext = MyApplication.appContext 
+1

を処理できませんでした。 'var appContext:Context?を置き換えますか? = 'lateinit var appContext:Context'で 'null'を返します。 –

+0

いいです!ありがとう:)私はこれを前に試していない理由を知らない。 –

0

あなたは==> ClassName.Companion.getFieldName()

+0

あなたは静的フィールド/ゲッターをコトリン?それはコンパニオンオブジェクトではなく、Javaコード – Zoe

+0

から発信されます。私は 'appContext = MyApplication.getAppContext();'をKotlinの静的Javaゲッターと呼び、 –

5
Javaからそれを呼び出すために==> ClassName.FieldName

kotlinからそれを呼び出すために、このよう

companion object{ 
//your static fields 
} 

それを使用することができますKotlinで

これが「コンパニオンオブジェクト」と呼ばれる:

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

はあなたには、いくつかのを持って想定アンドロイドのコードと、あなたはkotlinコードに変換したい:

  1. Visit Link
  2. 私がインターネット上で発見し、kotlinに変換しましたjavaコードを変換するために私を助けていますConvert from java

を見つけますコード

この可能性があります。answerあなたの質問については助けになりませんが、 ULDは、あなたが実行時にこのクラスのオブジェクトを1つだけしたいようにあなたがそれはそうハウツー-DOでkotlin

0

を知らないことjavaに知って変換するのに役立ちます。これはシングルトンと呼ばれます。 Javaで適切に実装するための推奨事項があります。幸いにもKotlinは直接あなたがトップスコープにシングルトンオブジェクトを宣言することができます:

val o = object { your attributes and methods here}

関連する問題