Как правильно перевести Java Construtor в Kotlin? - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть класс Java, который расширяет AsyncTask следующим образом:

class PostLocationTask extends AsyncTask<String, Void, String> {
    private String responseServer;
    private double latitude, longitude

    public PostLocationTask(double latitude, double longitude){
        this.latitude = latitude;
        this.longitude = longitude;
    }

}

Моя цель - перевести код на Kotlin.Теперь у меня есть это:

 companion object {
        class PostLocationTask internal constructor (context: PostLocationActivity): AsyncTask<String, Void, String?>(){

            private var responseServer = ""
            private var lat = 0.0
            private var lon = 0.0

            class PostLocationTask(var currentLat:Double, var currentLon:Double){
                lat = currentLat
                lon = currentLon
            }
        }
}

Android Studio красным цветом подчеркивает эти 2 строки внутри конструктора, говоря «Ожидается объявление члена».Обтекание этих двух строк внутри блока «init {}» изменит сообщение об ошибке, например, на «Unreolved reference: lat».

Тогда какой правильный перевод?

Ответы [ 4 ]

1 голос
/ 21 апреля 2019

Попробуйте это. Я надеюсь, что это помогает.

import android.os.AsyncTask
import android.os.Build
import android.support.annotation.RequiresApi

@RequiresApi(Build.VERSION_CODES.CUPCAKE)
internal class PostLocationTask(
    private val latitude: Double, 
    private val longitude: Double) : AsyncTask<String, Void, String>() {

        private val responseServer: String? = null

        override fun doInBackground(vararg strings: String): String? {
            return null
    }
}
0 голосов
/ 25 апреля 2019

Решение: Вот правильный код перевода в Kotlin.

inner class PostLocationTask(latitude: Double, longitude: Double) : AsyncTask<String, Void, String>() {
    private var responseServer: String? = null
    private var latitude: Double = latitude
    private var longitude: Double = longitude

    override fun doInBackground(vararg strings: String): String? {
        return null
    }
}

Более короткая версия

inner class PostLocationTask(private var latitude: Double, private var longitude: Double) : AsyncTask<String, Void, String>() {
    private var responseServer: String? = null

    override fun doInBackground(vararg strings: String): String? {
        return null
    }
}
0 голосов
/ 22 апреля 2019

Котлин имеет двух типов конструкторов .Первый, который идет после имени класса, а второй, который содержит тело класса и объявлен как «конструктор»

В вашем случае я бы сделал что-то вроде

class PostLocationTask(
    var latitude: Double? = null, 
    var longitude: Double? = null
) : AsyncTask<String, Void, String>() {
    var responseServer: String? = null
    override fun doInBackground(vararg params: String?): String = getLocationFromServer()
}
0 голосов
/ 22 апреля 2019

мне так кажется

class PostLocationTask 
constructor(var latitude: Double, var longitude: Double) : AsyncTask<String, Void, String>() {
    private var responseServer: String? = null

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...