创建对象实现接口时出错:该类没有构造函数

时间:2017-08-26 12:13:09

标签: android android-studio kotlin

我今天刚尝试在Kotlin开发一个关于使用Volley从任何网站获取数据的新应用程序。我在创建{{teasers}}实例时遇到问题而我不知道如何解决它。

创建对象StringRequestResponse.Listener<String>时出现此错误:

  

该课程没有构造函数

代码如下:

Response.ErrorListener

提前谢谢。

1 个答案:

答案 0 :(得分:2)

当您创建实现接口的对象时,不需要花括号(),因为接口没有构造函数。另一方面,当您创建一个扩展类的对象时,需要花括号。例如:

interface MyListener {
    fun success()
}

abstract class MyAbstractClass {
    abstract fun fail()
}

//Create an object which extends MyAbstractClass and implements MyListener
val impl = object: MyAbstractClass(), MyListener {
    override fun success() { TODO() }
    override fun fail() { TODO() }
}

因此,您需要删除Response.ListenerResponse.ErrorListener的大括号:

val stringRequest = StringRequest(Request.Method.GET, url,
        object: Response.Listener<String> {
            override fun onResponse(response:String) {
                // Display the first 500 characters of the response string.
                textView.setText("Response is: " + response.substring(0, 500))
            }
        }, object: Response.ErrorListener {
            override fun onErrorResponse(error:VolleyError) {
                textView.setText("That didn't work!")
            }
        })

由于Response.ListenerResponse.ErrorListenerSAM type在Java中定义且Kotlin支持SAM conversions,因此您可以通过以下方式简化代码:

val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String> {
            response ->
                // Display the first 500 characters of the response string.
                textView.setText("Response is: " + response.substring(0, 500))
        }, Response.ErrorListener {
            error ->
                textView.setText("That didn't work!")
        })

//Or even
val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String> {
            // Display the first 500 characters of the response string.
            textView.setText("Response is: " + it.substring(0, 500))
        }, Response.ErrorListener {
            textView.setText("That didn't work!")
        })

注意:目前Kotlin中定义的接口不支持SAM转换。