假设Library的方法采用回调处理程序Handler
,但为了处理结果,反复使用相同的逻辑。所以,我创建了一个具有逻辑的类SimpleHandler
。如果需要,使用该类的用户可以覆盖其方法onSuccess
onFail
。但是,如果特定情况下不需要处理,则用户可能不会覆盖它们,并且将使用SimpleHandler
的默认处理程序。
问题在于,当我自动完成方法时,IDE会自动插入超级调用,例如super.onFail()
。对于此代码,如下所示,如果它被覆盖,则不应调用super方法。有没有办法标记在重写时不应该调用super方法,所以IDE会停止插入它?
interface Handler
{
fun onFinished(result:Int);
}
abstract class SimpleHandler:Handler
{
override fun onFinished(result: Int)
{
if(result==0)
{
onSuccess();
}
else
{
onFail();
}
}
open fun onSuccess()
{
println("The developer is so lazy that he did not do anything.");
}
open fun onFail()
{
println("The developer is so lazy that he did not do anything.");
}
}
fun doSomething(handler:Handler)
{
handler.onFinished(10);
}
fun main(args: Array<String>)
{
doSomething(object: SimpleHandler(){
override fun onSuccess() {
println("I won! I won!");
}
override fun onFail() {
//super.onFail();
println("Me fail English?");
}
})
}
答案 0 :(得分:0)
AFAIK,写这样的东西没有问题:
fun doSomething(handler:Handler, result: Int) {
handler.onFinished(result)
}
fun main() {
doSomething(object: SimpleHandler() {
override fun onFail() {
println("My custom message")
}
}, 10)
}
fun main2() {
doSomething(object : SimpleHandler() {
override fun onSuccess() {
println("My other custom message")
}
}, 0)
}
如果需要,开发人员只需要覆盖他感兴趣的回调。 在这种情况下,在main()失败时,它会打印&#34;我的自定义消息&#34;。如果成功,将调用默认的onSuccess()。 反之亦然,对于main2():如果成功,它将打印&#34;我的其他自定义消息&#34;,但它失败,它只是调用默认的onSuccess。
使用org.jetbrains.kotlin在AS 3.1.1上测试:kotlin-stdlib-jre7:1.2.31
答案 1 :(得分:0)
在IDEA / Android Studio中,这由Settings
下的Editor > File and Code Templates
管理。
在我的安装中,我看到了Overridden Method Body
和Overridden Scala Method Body
,但没有针对Kotlin的特殊模板。所以我希望Kotlin能够使用Java模板。
您可以更改此模板,不要为给定的方法名称调用super
,但看起来您无法访问超类型的名称。有关如何共享模板的信息,请参阅链接文档。