覆盖时如何标记不调用超类的实现?

该死的蔬菜

假设库的方法采用回调处理程序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?");
        }
    })
}
阿列克谢·罗曼诺夫

在IDEA / Android的工作室,这是由管辖Editor > File and Code Templates之下Settings

在我的安装中,我看到了 Kotlin 的特殊模板Overridden Method BodyOverridden Scala Method Body但没有看到所以我希望 Kotlin 使用 Java 模板。

您可以更改此模板以不调用super给定的方法名称,但您似乎无权访问超类型的名称。有关如何共享模板,请参阅链接文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果将实现类标记为私有,则不调用委托方法?

Perl与Moo:如何调用方法的超类的实现?

生成equals / hashCode实现,但不调用超类,即使该类未扩展java.lang.Object

如何从Java的超类内部调用重写方法的超类实现?

无法调用超类的覆盖的setter属性

Javassist 不调用超类中定义的方法

创建对象实例而不调用超类构造函数

当我从 Object 类覆盖 equals() 时如何实现 hashCode()

当对象调用其超类的方法时如何处理?

为什么不调用实现Runnable接口的类的构造函数?

什么时候覆盖时不调用super()方法?

如何从类中调用变量而不调用类-C#?

ClassCast异常:子类实现在调用超类方法时抛出异常

如何强制我的类的任何子类始终调用它们所覆盖的父类的实现方法?

C ++-如何调用类而不调用其属性?

当子类中有覆盖函数时,如何转换为超类

正确的类时__new__不调用__init__

覆盖方法时调用超类的方法的目的是什么?

Swift:在子类中覆盖==仅在超类中导致==的调用

如何在Java中强制调用超类实现Object.toString()而不是子类重写对对象的实现

如何实现类方法的多重覆盖

如果定义了超类__new__,则不调用__init__子类

Java .equals()instanceof子类?为什么不调用超类等于而不是将其最终化呢?

当超类不可克隆时覆盖Java中的Clone()方法

在Python中覆盖超类时跳过参数

如何调用超类的协议功能?

如何调用超类的重写方法?

如何使子类自动调用超类方法

JSON编码自定义类不调用覆盖默认值