我有以下课程:
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
)
答案 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中完成。