簡體   English   中英

如何正確地將 Java 構造函數轉換為 Kotlin?

[英]How to translate Java construtor to Kotlin properly?

我有一個像這樣擴展 AsyncTask 的 Java 類:

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 用紅色在構造函數中的這兩行下划線,表示“期望成員聲明”。 例如,將這兩行包裝在“init {}”塊中會將錯誤消息更改為“Unresolved reference: lat”。

那么正確的翻譯是什么?

做這個。

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
    }
}

我希望它有幫助

我想是這樣

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

}

Kotlin 有兩種類型的構造函數 第一個是在類名之后,第二個是包含類的主體並被聲明為“構造函數”

在你的情況下,我會做類似的事情

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()
}

解決方案:這是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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM