是否可以通过某种方式限定最终参数以解决与匿名类成员的命名冲突?
“你为什么要这样做呢?” 尽管如此,有没有办法在不更改最终方法参数名称的情况下完成此操作?
private Foo createAnonymousFoo(final Bar bar) { return new Foo() { private Bar bar = SomeUnknownScopeQualifier.bar; public Bar getBar() { return bar; } public void doSomethingThatReassignsBar() { bar = bar.createSomeDerivedInstanceOfBar(); } }; }
显然,如果没有doSomethingThatReassignsBar调用,您将不需要成员Bar等。 在这种情况下,简单的解决方法是将final Bar bar
更改为final Bar bar
final Bar startBar
,然后分配就可以了。 但出于好奇,是否有可能专门提到final Bar
(类似于你说Super.this
的方式)?
我认为你的问题的答案是“不”。 从Java语言规范 :
局部变量(第14.4节),forms参数(第8.4.1节),exception参数(第14.20节)和本地类(第14.3节)只能使用简单名称(第6.2节)引用,而不是限定名称( 6.6节)。
换句话说,在示例代码中没有任何东西可以替换SomeUnknownScopeQualifier
,以使内部类中的赋值语句引用forms参数名称。
我认为不可能这样做。 重命名涉及的变量或创建别名:
private Foo createAnonymousFoo(final Bar bar) { final Bar alias = bar; return new Foo() { private Bar bar = alias; // ... }; }