【问题标题】:How to create a 2D array of containing different data types如何创建包含不同数据类型的二维数组
【发布时间】:2020-12-20 05:55:40
【问题描述】:

我的目标是有一个像这样的数组:{{Object, int}, {Object, int}} 其中整数表示有多少先前指示的对象的计数。 我已经研究过 java 泛型,但我似乎无法做到正确。 到目前为止我所拥有的:

class AmmoRack < E extends Bullet, N > {

  AmmoRack<Bullet, Integer>[][] ammo;

  public AmmoRack() {
    this( {new Bullet(Bullet.AP), 50});// Bullet.AP is an int, public Bullet(int type){...}
  }
  public AmmoRack(AmmoRack<Bullet, Integer>[][] ammo) {
    this.ammo = ammo;
  }
}

我查看了其他问题,但它们似乎对我的情况没有特别的帮助。

【问题讨论】:

  • 在我看来你想要的是一个地图,而不是一个数组
  • 我不明白你的 AmmoRack 类的结构。 AmmoRack 包含一个 AmmoRacks 数组(或其他)(在字段 ammo 中)?里面的 AmmoRacks 会再次包含 AmmoRacks 吗?你真的想要那个(可能是无限的)嵌套吗?
  • 如何创建一个包含不同数据类型的二维数组 - 你不能,除非你创建Object[][]
  • 只是好奇。这是minecraft-related 的问题吗? TIA。

标签: java generics multidimensional-array


【解决方案1】:

您不能定义具有两种不同类型的数组。 bullet 对象是 Bullet 类型, 50 是 Integer 类型。但是所有类都扩展了 Object 类。

如果你这样写代码:

public class AmmoRack extends Bullet {

Bullet[][] ammo;

public AmmoRack(Integer anIntegerType, int n) {
    super(n);
    this.ammo = new Bullet[new Bullet(n)][anIntegerType];
}}

发生编译时错误,编译器说 new Bullet(n) 应该是 int 类型。因为你定义了一个数组! 还有 Object[][] 弹药;是错的。会发生同样的错误。除非你认为子弹是一个数字并在你的 Bullet 类中定义它,这是不合逻辑的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多