我有以下课程:

abstract class MyAbstract<T>
{
    T val_;
    MyAbstract(T val)
    {
        val_ = val;
    }
    T getVal()
    {
        return val_;
    }
}


我希望我的抽象类对于T = String具有不同的主体,例如(与我同住):

abstract class MyAbstract<T extends String>
{
    T val_;
    T upperVal_;
    MyAbstract(T val)
    {
        val_ = val;
        upperVal_ = val.toUpperCase();
    }
    T getVal()
    {
        return upperVal_;
    }
}


我试图获得的结果是,如果我扩展MyAbstract,将使用第二个版本,否则将使用第一个版本。这有可能吗?谢谢!

更新:我希望能够扩展相同的抽象类并做类似的事情:

Type1 extends MyAbstract<Integer>...




Type2 extends MyAbstract<String>...


(请注意,我对两种类型都使用MyAbstract

最佳答案

将第二个实现extend设为第一个。

abstract class MyAbstract2<T extends String> extends MyAbstract<T>
{
    T upperVal_;

    MyAbstract(T val)
    {
        super(val);
        upperVal_ = val.toUpperCase();
    }

    @Override
    T getVal()
    {
        return upperVal_;
    }
}

09-27 08:37