【问题标题】:How to translate Java construtor to Kotlin properly?如何正确地将 Java 构造器翻译成 Kotlin?
【发布时间】:2020-06-22 09:17:28
【问题描述】:

我有一个像这样扩展 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”。

那么正确的翻译是什么?

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    这样做。

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      我想是的

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

      【讨论】:

        【解决方案3】:

        Kotlin 有 two types of constructors。第一个是在类名之后,第二个是包含类的主体并声明为“构造函数”

        在你的情况下,我会做类似的事情

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

        【讨论】:

          猜你喜欢
          • 2021-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-07
          • 2015-09-22
          • 1970-01-01
          • 2021-09-16
          相关资源
          最近更新 更多