接口方法中的最后一个参数 - 有什么意义?

2022-08-31 06:11:14

在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) {
        ...
    }
}

在上面的示例中,并且在类VS接口中具有相反的定义。barbazfinal

以同样的方式,当一个类方法扩展另一个类方法时,无论是否扩展,都不会强制执行任何限制。finalabstract

虽然在类方法主体中具有一些实际价值,但指定接口方法参数是否有任何意义?finalfinal


答案 1

这似乎没有任何意义。根据 Java 语言规范 4.12.4

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

但是,方法参数上的修饰符在匹配被覆盖方法的签名的规则中未提及,并且它对调用方没有影响,仅在实现的正文中。此外,正如 Robin 在注释中指出的那样,方法参数上的修饰符对生成的字节代码没有影响。(对于 的其他用途,则不然。finalfinalfinal


答案 2

某些 IDE 在子类中插入实现方法时,会复制抽象/接口方法的签名。

我不认为这对编译器有任何影响。

编辑:虽然我相信这在过去是正确的,但我不认为目前的IDE会再这样做了。