【发布时间】:2015-07-10 19:26:07
【问题描述】:
我有一个具有以下功能的 Box 泛型类:
- 2 个
put方法之一应允许客户端插入一个框并将其内容获取到当前框。
我希望这个方法得到 2 种类型的框:Box<Number> 和 Box<Integer>,这就是我将 put(Box<T>) 方法更改为 put(Box<? extends Number> box) 的原因。但我收到编译警告。我在这里做错了什么?
这是我当前的代码: 我得到的警告是:类型安全:来自 capture#1-of 的未经检查的强制转换?将 Number 扩展到 T
public class Box<T> {
public T get() {
return element;
}
public void put(T element) {
this.element = element;
}
public void put(Box<? extends Number> box) {
put((T) box.get()); // this is where i get the warning
}
private T element;
}
public class BoxClient {
public static void main(String[] args) {
Box<Number> nBox = new Box<Number>();
Box<Integer> iBox = new Box<Integer>();
nBox.put(iBox);
}
}
【问题讨论】:
-
当您有错误时,请在您的问题中包含错误。
-
“但我收到编译警告”你能分享一下吗?
-
T不扩展Number,因此会出现编译器警告;你正在做一个不安全的演员。