考虑以下示例大纲:
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”行。这里的目标是避免每次引用时都必须转换从超类继承的上下文成员。换句话说,我宁愿
context.additionalMethod()
而不是
((SomeBar)context).additionalMethod()
每一次。
这种方法似乎有效,但我想知道它是否正确,或者做这样的事情是否有任何问题。就我而言,这不会导致含糊不清,尽管我可以看到它的一般情况。
另外,我只是想确保我不是在这里创建一个新对象,而是让方法以不同的方式解释context
引用成员。
我认为另一种方法是将context
重命名为rawContext
,这可能更合适。
提前致谢
答案 0 :(得分:4)
这是使用泛型的经典案例:
abstract class AbstractFoo<T extends IBar>
{
protected T context;
// some default impl
}
然后
class SomeFoo extends AbstractFoo<SomeBar>
{
// access context directly as type SomeBar
}