Java代码:
$ hdfs dfs -ls output-18
Found 16 items
output-18/_SUCCESS
output-18/part-00000
output-18/part-00001
output-18/part-00002
output-18/part-00003
output-18/part-00004
output-18/part-00005
output-18/part-00006
output-18/part-00007
output-18/part-00008
output-18/part-00009
output-18/part-00010
output-18/part-00011
output-18/part-00012
output-18/part-00013
output-18/part-00014
如何将此Java代码转换为Kotlin?
我尝试过:
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// code here
}
};
但这似乎是不正确的,并且在private val mHandler = object : Handler() {
fun handleMessage(msg: Message) {
// code here
}
}
上给出了编译时错误
答案 0 :(得分:7)
问题:覆盖handleMessage()
类的Handler
方法的语法不正确。
解决方案::在要覆盖的功能之前添加override
关键字。
private val mHandler = object : Handler() {
override fun handleMessage(msg: Message?) {
// Your logic code here.
}
}
更新:作为@BeniBela的评论,使用上述代码时,将显示皮棉警告
此Handler类应该是静态的,否则可能会发生泄漏。
由于此Handler被声明为内部类,因此可能会阻止 外层类被垃圾收集。如果处理程序正在使用 对于主线程以外的线程,则使用Looper或MessageQueue,然后 没有问题。
如果处理程序正在使用主线程的Looper或MessageQueue, 您需要修改您的Handler声明,如下所示: 处理程序作为静态类;在外部类中,实例化一个 对外部类的WeakReference并将此对象传递给您的Handler 当您实例化处理程序时;引用所有成员 外部类使用WeakReference对象。
class OuterClass {
// In the outer class, instantiate a WeakReference to the outer class.
private val outerClass = WeakReference<OuterClass>(this)
// Pass the WeakReference object to the outer class to your Handler
// when you instantiate the Handler
private val mMyHandler = MyHandler(outerClass)
private var outerVariable: String = "OuterClass"
private fun outerMethod() {
}
// Declare the Handler as a static class.
class MyHandler(private val outerClass: WeakReference<OuterClass>) : Handler() {
override fun handleMessage(msg: Message?) {
// Your logic code here.
// ...
// Make all references to members of the outer class
// using the WeakReference object.
outerClass.get()?.outerVariable
outerClass.get()?.outerMethod()
}
}
}
答案 1 :(得分:3)
您可以通过将循环程序传递给处理程序来简化操作(无需WeakReference):
val handler = object: Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
doStuff()
}
}
答案 2 :(得分:1)
就我而言:
@SuppressLint("HandlerLeak")
private inner class MessageHandler(private val mContext: Context) : Handler() {
override fun handleMessage(msg: Message) {
when (msg.what) {
}
}
}