何时需要施放'this'?

时间:2015-07-14 20:24:02

标签: java casting this

Java中是否有任何情况需要您将this显式转换为当前类以外的其他类型?

class SomeClass
{
    void foo()
    {
        SomeOtherClass s = (SomeOtherClass) this;
    }
}

编辑 :所有答案都是指SomeOtherClassSomeClass的子类,但是this可以投射的情况在适当的OO设计的情况下,应避免使用。我正在寻找OO无法帮助你的情况,即SomeOtherClass超级 - 类SomeClass

2 个答案:

答案 0 :(得分:5)

当SomeClass是SomeOtherClass的超类时。但是......如果你这样做,这意味着你的OO设计不太合适,你很可能会滥用你的模型。

答案 1 :(得分:2)

不,不应该存在需要将this强制转换为子类的情况,至少没有适当的OO设计。以下示例仅用于说明如何使用它。

class BaseClass {

    public void foo() {
        if(this instanceof SomeClass) {
            SomeClass s = (SomeClass) this;
            s.bar();
        } else {
            baz();
        }
    }

    private void baz() {
        ...
    }
}

class SomeClass extends BaseClass {
    public void bar() {

    }
}