类型不匹配:无法从捕获#2转换?将数字扩展为T

时间:2017-04-19 17:44:59

标签: java generics

public class Stack {
    private LinkedList<? extends Number> stack;

    public <T extends Number> void push(T t){
        stack.add(t);
    }

    public <T extends Number>T pop(){
        return stack.removeLast();
    }
}

添加和删除last方法都会产生编译时错误。请帮我理解我在这里做错了什么?

推送错误 -

  

该方法在类型中添加(捕获#1-of?extends Number)   LinkedList不适用于   参数(T)

弹出错误 -

  

类型不匹配:无法从捕获#2转换?将Number扩展为T

2 个答案:

答案 0 :(得分:4)

?T不同,您尚未在班级中定义T(仅适用于这些方法)。因此,我建议你将整个Stack类设为通用的:

public class Stack<T extends Number> {
  private LinkedList<T> stack;

然后,您可以在Tpush()方法中使用pop()

答案 1 :(得分:2)

为什么不让你的全班通用?像这样:

public class Stack <T extends Number>{
    private LinkedList<T> stack;

    public void push(T t){
        stack.add(t);
    }

    public T pop(){
        return stack.removeLast();
    }

}