我正在尝试运行代码。我和我得到两个编译错误: 1.ReferenceSystem.out.println
不明确(获取 char[] 的方法和获取 String 的方法之间的冲突) 2.Cap#1 无法转换为 T 返回 st.pop()
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Stack <Number> stackNumber = new Stack<Number>();
Test t = new Test();
t.setMethod(stackNumber,new Integer(3));
System.out.println(t.getMethod(stackNumber));
}
public <T extends Number> void setMethod (Stack<? super Number>st,T t)
{
st.add(t);
}
public <T>T getMethod (Stack<? extends Number >st)
{
return st.pop();
}
}
我知道我可以更改 getMethod 签名以返回 Number 并且程序将被成功编译,但我想了解为什么使用当前签名会出现编译错误?AFAIK,无界限的 T 被视为Object和声明返回Object的函数可以返回任何 Object,因为Object是所有类(包括 Number)的“父亲”。有人可以让我在这里解雇我吗?