【发布时间】:2014-12-31 11:06:23
【问题描述】:
这是一个试图改进我的代码的问题。关于泛型和未经检查的警告;我确实知道@suppresswarnings 注释。问题是我应该编写什么代码来抑制它。请使用以下代码。
public class NumericBox<T extends Number> implements Box<T> {
private T element;
public NumericBox(T element) {
this.element = element;
}
@Override public T getElement() {
return element;
}
public T insert(Number newElement) {
T oldElement = this.element;
this.element = (T) newElement; // warning("unchecked")
return oldElement;
}
}
执行此操作的编码方式是什么(不是注释)。在我找到的文档中 术语“未检查”意味着编译器没有足够的类型信息来执行所有必需的类型检查以确保类型安全。但是,不要明白。这对我来说似乎没问题:
void foo(Number n) {
Short asShort = (Short) n; //OK
T asTypeWhichExtendsNumber = (T) n; // warning
}
额外。如果我想添加一个空的构造函数,有什么方法可以在元素中保持“零”?
NumeircBox<Short> o = new NumericBox<>(); // expectes 0 in the element
【问题讨论】:
-
为什么方法签名不是
T insert(T newElement)? -
想象一下,您真的想要一个仅用于 NumericBoxes 的方法,而不是每个框,并且该方法需要接收一个数字,而不是每个 T。也许我应该使用 compareTo() 更改为某些东西
-
我为警告寻找了一个场景,试着想象你真的想要签名。如有必要,我会更改场景。