“你为什么这样做会对你有什么不妥?”尽管如此,有没有办法在不改变最终方法参数名的情况下完成这个?
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 startBar
的内容,然后分配就可以了。但出于好奇,是否可以专门引用final Bar
(类似于您所说的方式Super.this
)?
答案 0 :(得分:7)
我认为你问题的答案是“不”。来自Java Language Specification:
局部变量(§14.4),形式参数(§8.4.1),异常参数(§14.20)和本地类(§14.3)只能使用简单名称(§6.2)来引用,而不是限定名称(§6.6)。
换句话说,在示例代码中没有任何东西可以替换SomeUnknownScopeQualifier
,以使内部类中的赋值语句引用形式参数名称。
答案 1 :(得分:3)
我认为不可能这样做。重命名涉及的变量或创建别名:
private Foo createAnonymousFoo(final Bar bar) {
final Bar alias = bar;
return new Foo() {
private Bar bar = alias;
// ...
};
}