3

考虑以下示例大纲:

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不同的方式解释引用成员。

我想另一种方法是重命名contextrawContext,这可能更可取。

提前致谢

4

1 回答 1

4

这是使用泛型的经典案例:

abstract class AbstractFoo<T extends IBar>
{
    protected T context;
    // some default impl
}

然后

class SomeFoo extends AbstractFoo<SomeBar> 
{
    // access context directly as type SomeBar
}
于 2013-03-19T06:36:31.930 回答