[英]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.