抽象泛型类的不同实现

时间:2011-10-19 17:43:43

标签: java generics overloading

我有以下课程:

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

2 个答案:

答案 0 :(得分:2)

将第二个实现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_; 
    }
}

答案 1 :(得分:0)

Java不像C ++那样支持模板专业化。特别是,泛型类声明的所有实例共享相同的运行时类,因此具有相同的字段集。

无论你想要完成什么,你都必须以不同的方式在Java中完成。