当前位置: 首页 > 面试题库 >

在Java中创建通用数组

仲孙疏珂
2023-03-14
问题内容

我正在尝试在java中创建一个通用数组-在其中我遇到了一些问题-我如何制作一个大小为6且里面有一个byte []和一个Integer的元组数组?

谢谢

private Tuple<byte[], Integer>[] alternativeImages1 = new Tuple<byte[], Integer>[6];

class Tuple<F, S> {

    public final F first;
    public final S second;

    public Tuple(final F first, final S second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        final Tuple tuple = (Tuple) o;
        return this.first == tuple.first && this.second == tuple.second;
    }

    @Override
    public int hashCode() {
        int result = this.first != null ? first.hashCode() : 0;
        result = 31 * result + (this.second != null ? second.hashCode() : 0);
        return result;
    }
}

问题答案:

好吧,您可以使用原始类型:

Tuple[] array = new Tuple[6];

或者,您可以进行未经检查的转换:

Tuple<byte[], Integer>[] array = (Tuple<byte[], Integer>[])new Tuple[6];

// or just this because raw types let you do it
Tuple<byte[], Integer>[] array = new Tuple[6];

或者,您也可以使用列表:

List<Tuple<byte[], Integer>> list = new ArrayList<Tuple<byte[], Integer>>();

我建议改用列表。

在前两个选项之间进行选择,我建议您选择未经检查的转换,因为它将为您提供编译时检查。但是,如果将其他类型的元组放入其中,它将不会引发ArrayStoreException。



 类似资料:
  • 问题内容: 由于Java泛型的实现,因此不能有以下代码: 如何在保持类型安全的同时实现此目的? 我在Java论坛上看到了这样的解决方案: 但是我真的不知道发生了什么。 问题答案: 我不得不问一个问题:您的GenSet“已选中”还是“未选中”?那是什么意思? 检查:强打字。GenSet明确地知道什么类型的包含对象(即它的构造是明确要求有Class 参数,当他们通过了类型不是参数的方法会抛出异常E。见

  • 问题内容: 该代码似乎不起作用,它将抛出异常: java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为… 有人可以告诉我如何创建具有通用类型的数组吗?谢谢。 问题答案: 您不能:必须将类作为参数传递:

  • 问题内容: 我正在尝试做这样的事情: myObject是一个类。我收到此错误:-通用数组创建(箭头指向new。) 问题答案: 你不能有泛型类的数组。Java根本不支持它。 你应该考虑使用集合而不是数组。例如, 另一个“解决方法”是创建这样的辅助类 然后创建一个数组MyObjectArrayList。 这是一篇很好的文章,说明了为什么在语言中不允许这样做。本文提供了以下示例,说明如果允许的话可能发生

  • 问题内容: 我不理解泛型和数组之间的联系。 我可以使用通用类型创建数组引用: 但是不能创建具有通用类型的数组对象: 但它有效: 问题答案: 你不应该混淆数组和泛型。他们在一起不好。数组和泛型类型执行类型检查的方式有所不同。我们说数组是经过整形的,而泛型则不是。结果,你会看到这些差异适用于数组和泛型。 数组是协变的,泛型不是: 那意味着什么?你现在必须已经知道以下分配有效: 基本上,Object[]

  • 问题内容: 我有以下方法: 我想使其成为一种通用方法,这样我就不必为每个新的自定义类型编写新的代码。我可以这样做,这需要在调用update()之前实例化该对象: 出于好奇,我想知道是否有一种方法可以使用Java泛型来做到这一点: 有没有办法用Java做到这一点? 问题答案: 请注意,在这种情况下将可以修复。任一(其本身包括可从获得)或本身已得到通过。

  • 问题内容: 我想在Java中创建一个通用数组,以维护通常由Java提供的类型安全。 我正在使用此代码: 此代码类型安全吗?如果是这样,为什么?为什么它是类型安全的,我需要强制转换? 问题答案: 该方法的返回类型为。因此,您不能将其直接分配给以外的任何其他对象。因此,您需要演员表。 该方法委托给一个方法 创建具有指定组件类型和长度的新数组 因此,它正在创建一个type数组。 类型安全性,假设声明为