【问题标题】:Creating an array of generic stacks创建一个通用堆栈数组
【发布时间】:2012-03-25 22:13:05
【问题描述】:
Stack<E>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), 
                     new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()};

对于类,我必须创建自己的 Stack 类,以接收我指定的任何对象。 根据规范,我必须将所有堆栈放入一个数组中。

但是,当我尝试创建堆栈数组时,我收到“找不到符号:E 类”错误。

如何创建通用堆栈数组?

【问题讨论】:

  • 您不能创建泛型数组。但是如果可以的话,你想用它做什么呢?
  • 创建ListStacks 几乎肯定会更好。 (尽管对于您的特定情况,坦率地说,我认为您根本不应该创建数组或列表,而应该将不同类型的列表保留为显式的单独变量。)

标签: java arrays generics


【解决方案1】:

诸如 之类的泛型类型声明仅在您定义类时起作用,例如

public class Stack<E>{
 // etc.
} 

要像您一样创建堆栈数组,您可以使用通配符泛型:

Stack<?>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()};

或者如果堆栈中的所有对象共享一个共同的继承,你可以使用类似的东西来缩小通配符

Stack<? extends Furniture>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()};

【讨论】:

  • Stack&lt;?&gt;[] 有效,但 Stack&lt;? extends Furniture&gt;[] 无效,因为您不能创建通用数组,至少不能使用那种漂亮的短语法:/
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 2011-07-14
  • 2014-04-14
  • 1970-01-01
  • 2017-03-30
  • 2010-12-08
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多