2017-04-19 28 views
2
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(); 
    } 
} 

添加和删除最后一个方法都给出编译时错误。请帮我理解我在这里做错了什么?类型不匹配:无法从捕获#2转换?将Number扩展为T

错误在推 -

的方法,附加(?捕获#1-延伸数)在 类型链表是不适用于 参数(T)

错误在流行 -

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

+0

请[编辑]你的问题,并包括错误。你也应该描述你试图达到什么目标,这个问题是无关紧要的。 –

+1

'?'不是'T',只是在类中的任何地方使用'Stack '和'T' – 2017-04-19 17:48:14

+0

在这种情况下,您不需要泛型。你可以用'Number'的上限替换它们。该代码很可能(即使它会编译)导致一些'ClassCastException's。想象一下你'推(...)'一个'双',但尝试'弹出()一个'整数'... – Turing85

回答

2

?是不一样的东西T,你有没有在你的类中定义T(仅适用于这些方法)。因此,我建议你让整个Stack类通用这样:

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

然后你就可以在你的push()pop()方法使用T

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(); 
    } 

} 
相关问题