java泛型类和通配符

net*_*lie 4 java generics

我有一个Box泛型类,具有以下功能:

  • 2 put种方法中的一种应该允许客户端插入一个框并将其内容添加到当前框中.

我想这种方法来获得2种类型的盒子:Box<Number>Box<Integer>,这就是为什么我改变了put(Box<T>)方法put(Box<? extends Number> box).但是我收到了编译警告.我在这做错了什么?

这是我当前的代码:我得到的警告是:类型安全:未捕获来自捕获#1​​的投射?将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);

    }

}
Run Code Online (Sandbox Code Playgroud)

Zho*_*gYu 6

改为

public void put(Box<? extends T> box) {
    put(box.get());
}
Run Code Online (Sandbox Code Playgroud)