繁体   English   中英

如何重写父类的方法但允许可选参数?

[英]How to override a parent class's method but allow optional arguments?

我有:

class A{
    public void foo(String str){
       //do stuff
    }
}

并且:

class B{
    @Override
    public void foo(String str, Integer... i){
       //do different stuff
    }
}

有没有办法做到这一点?

class B{
    public void bar(String str, Integer... i){
       //do different stuff

    @Override
    public void foo(String str){
       if(something)
          bar(str, 1);
       else if(something else)
          super.foo(str);
    }
}

基本上:是否可以在允许可选参数的同时覆盖父方法,还是从根本上改变foo的签名?

添加可选参数会更改方法的签名,从而防止覆盖。 您的代码示例中的@Override属性无效。

您可以在JLS第8.4.2节中找到有关此内容的详细信息:

如果满足以下任一条件,则方法m1的签名是方法m2的签名的子签名:

  • m2m1具有相同的签名,或者
  • m1的签名与m2的签名的擦除(第4.6节)相同。

两个方法签名m1m2是倍率相当于当且仅当任一m1是一个子签名m2 ,或m2是的子签名m1

您需要使用带有可选参数的签名定义其他方法,并通过对super的引用来调用base方法。

如果签名不匹配,则不能覆盖该方法。

这就是我要做的:

class B
{
    public void foo (String str, Integer... i)
    {
       // executed if i.length > 0
    }

    @Override
    public void foo (String str)
    {
       // call super.foo(str) if you wish
       // and/or do some other stuff
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM