我需要创建一个JTextField只强制某些类型的输入(我的目标是某些功能排除使用JFormattedTextField).为了实现这一点,我想创建一个abstract JTextField带泛型的类:
abstract class VTextField_Core<E> extends JTextField {
public abstract E getAmount();
public abstract <E> void setAmount(E amount);
}
Run Code Online (Sandbox Code Playgroud)
并以这样的方式实现它:
class VTextField_Integer<Integer> extends VTextField_Core {
@Override
public void setAmount(Integer amount) {
// format Integer to text
}
@Override
public Integer getAmount() {
// parse text and return Integer
}
}
class VTextField_Double<Double> extends VTextField_Core {
@Override
public void setAmount(Double amount) {
// format Double to text
}
@Override
public Double getAmount() {
// parse text and return Double
}
}
Run Code Online (Sandbox Code Playgroud)
但这会给编译器错误:
name clash: setAmount(Integer) in Test2.VTextField_Integer and <E>setAmount(E) in Test2.VTextField_Core have the same erasure, yet neither overrides the other
where Integer,E are type-variables:
Integer extends Object declared in class Test2.VTextField_Integer
E extends Object declared in method <E>setAmount(E)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么这不起作用.如何扩展抽象通用超类并实现它?
基于这个问题:扩展通用抽象类和正确使用超级
我试过了:
class VTextField_Integer<Integer> extends VTextField_Core<Integer> {
class VTextField_Integer<Integer> extends VTextField_Core<E> {
Run Code Online (Sandbox Code Playgroud)
我很难过.
class VTextField_Integer<Integer>声明一个名为的类型参数Integer,这不是您需要的.
将您的课程更改为:
class VTextField_Integer extends VTextField_Core<Integer> {
@Override
public void setAmount(Integer amount) {
// format Integer to text
}
@Override
public Integer getAmount() {
// parse text and return Integer
}
}
class VTextField_Double extends VTextField_Core<Double> {
@Override
public void setAmount(Double amount) {
// format Double to text
}
@Override
public Double getAmount() {
// parse text and return Double
}
}
Run Code Online (Sandbox Code Playgroud)
而且你不需要类型参数<E>的setAmount抽象类的方法.
abstract class VTextField_Core<E> extends JTextField {
public abstract E getAmount();
public abstract void setAmount(E amount);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |