重点是什么?

在Java中,在接口方法中定义final参数并且不遵守实现类中的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语言规范4.12.4:

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

然而,在匹配重写方法的签名的规则中没有提到方法参数的final修饰符,并且它只对实现的主体内部没有影响。 另外,正如Robin在评论中指出的那样,方法参数的final修饰符对生成的字节码没有影响。 (对于final其他用途,这不是真的。)


在子类中插入实现方法时,一些IDE将复制abstract / interface方法的签名。

我不相信这对编译器有什么影响。


方法参数的最终注释总是只与调用方的方法实现无关。 因此,在接口方法签名中没有真正的理由使用它们。 除非您想遵循所有方法签名中需要最终方法参数的相同一致编码标准。 那么能够这样做是很好的。

链接地址: http://www.djcxy.com/p/20847.html

上一篇: what's the point?

下一篇: Passing python dictionary to a class changes the value of dictionary