接口方法中的最终参数 – 有什么意义?

问题:

在Java中,在接口方法中定义final参数是绝对合法的,并且在实现类中不遵循这些参数,例如:

public interface Foo {
    public void foo(int bar, final int baz);
}

public class FooImpl implements Foo {

    @Override
    public void foo(final int bar, int baz) {
        ...
    }
}

在上面的例子中,barbaz在类VS接口中具有相反的final定义。
以同样的方式,当一个类方法扩展另一个方法abstract时,不执行final限制。
虽然final在类方法体内有一些实用价值,但是有没有点指定接口方法参数的final

回答:

看起来不像根据Java Language Specification 4.12.4

声明变量final可以作为有用的文档,其值不会改变,并可以帮助避免编程错误。

但是,在rules for matching signatures的覆盖方法中没有提到方法参数的final修饰符,并且只对实现的正文内的调用者没有影响。另外,如Robin在注释中所指出的,方法参数的final修饰符对生成的字节代码没有影响。 (对于final的其他用途,这是不正确的。)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Final arguments in interface methods – what’s the point?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

78 − 74 =