有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java堆栈数组

有没有可能创建一个堆栈数组,而不必在堆栈出现时对其进行强制转换? 当我执行以下操作时,Eclipse警告我无法生成堆栈的通用数组:

Stack<Card>[] cards = new Stack<Card>[52];

共 (6) 个答案

  1. # 1 楼答案

    为什么要使用数组呢

    它是一种低级编程结构

    如果您不想麻烦进行初始化,请使用ListSet(例如org.apache.commons.collections.list.LazyList

    或者至少

    Arrays.asList(new Stack[52])将数组包装到列表中

    我无法重现当前错误..:(可能是因为设置了不同的警告/错误级别

  2. # 2 楼答案

    Joshua Bloch在高效Java,第二版中出色地描述了这个问题Check out the relevant section on Google Book Search

    他提出的建议是更喜欢列表而不是数组。您的代码可能会如下所示:

    List<Stack<Card>> cards = new ArrayList<Stack<Card>>();
    
  3. # 3 楼答案

    Stack<Card>[] decks = new Stack[9];       // Declare
    Card c = decks[5].pop();                  // This compiles - java 'knows' the type
    Integer i = decks[4].pop();               // This will not compile
    
  4. # 4 楼答案

    这个数组不需要是泛型,因为他总是这样定义的。你为什么认为你必须投?我认为eclipse在这里有些混乱

  5. # 5 楼答案

    这与类型擦除有关。基本上,泛型类型只在编译时存在,在运行时不存在

    请看this forum post以获得更好的解释

  6. # 6 楼答案

    您可以执行以下操作,尽管这会给您一个编译器“未检查”的警告

    Stack<Card>[] cards = (Stack<Card>[]) new Stack[52];