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