java接口中方法final_java – 当我定义一个接口方法的参数final时,我需要在实现中重复final吗?...

是的,如果希望编译器确保在当前方法中永远不会重新分配这些参数,则需要将方法参数重新声明为final.当覆盖接口和类定义时,这同时适用.

原因很简单:这是Java语言规范中指定的行为.但是,编译器甚至无法检查是否重新分配最终参数,即使它想要:

方法范围中变量的最终修饰符实际上并未转换为字节代码或在别处写入Java类文件格式.它在编译特定类或接口后基本消失,并且在编译后无法跟踪.由于每个类和接口都是独立于其他类和接口编译的,因此编译器或JVM运行时验证程序无法确保在子类或接口实现中使用新值分配最终参数.它只在单个类的编译中,Java编译器可以确保不会发生此类分配.因此,对于类而言,最终参数的声明是本地的,并且不可能在将来更改此行为或通过使用运行时反射来查找此功能.

因此,在抽象方法签名中使用final参数不能用于实际目的,也不能用于实际目的:由于Java通过值调用而不是通过引用实现方法调用,因此final修饰符永远不会影响实现之外的代码方法的范围.因此,如果重新分配方法参数变量,则仅仅是方法实际实现的细节.因此,我个人从不使用它来定义类或接口中的抽象方法.这是允许的,但没有意义.

在非抽象方法定义中,声明方法变量final仅用于以下两个目的之一:

>您希望在匿名类的范围内使用变量.

>您希望编译器检查您是否意外重新分配变量.这在处理类似类型的许多变量时特别有用.这里,最终修饰符也可以作为某种文档.

更新:从Java 8开始,如果方法参数是合成的(在源代码中没有表示,强制要求(隐式存在于源代码中,例如lambda表达式的this引用)或者它是final的,那么它就会被归结.)不会影响重写方法,其中需要重复最终声明才能设置此标志.此外,Java语言不注意这些标志,只有元框架才能读取这些标志来实现它们可能对这些标志做出反应的逻辑.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值