考虑以下示例大纲:
interface IBar{ /*...*/ }
class SomeBar implements IBar { /*...*/ }
abstract class AbstractFoo
{
IBar context;
/* Some default implementations of methods manipulating 'context' */
}
class SomeFoo extends AbstractFoo
{
final SomeBar context = (SomeBar)super.context; // <-- AAA
/* Some methods that reference additional non-IBar methods. */
// The line AAA allows us to use:
// context.additionalMethod()
// instead of
// ((SomeBar)context).additionalMethod()
}
我的问题是关于“AAA”行的。此处的目标是避免在每次引用时都强制转换从父类(super class)继承的上下文成员。换句话说,我宁愿
context.additionalMethod()
代替
((SomeBar)context).additionalMethod()
每次。
这种方法似乎可行,但我想知道它是否正确,或者这样做是否有任何问题。就我而言,这不会导致模棱两可,尽管我可以看出一般情况下会发生什么。
此外,我只是想确保我不是在此处创建新对象,而是让方法以不同方式解释 context
引用成员。
我想另一种方法是将 context
重命名为类似 rawContext
的名称,这可能更可取。
提前致谢
最佳答案
这是使用泛型的经典案例:
abstract class AbstractFoo<T extends IBar>
{
protected T context;
// some default impl
}
然后
class SomeFoo extends AbstractFoo<SomeBar>
{
// access context directly as type SomeBar
}
关于java - 子类中的成员阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15492910/