【问题标题】:How do I pass in a class to make an array of classes?如何传入一个类来创建一个类数组?
【发布时间】:2019-07-29 21:14:14
【问题描述】:

我想创建一个对数组执行不同方法的类(数组)。到目前为止,我所拥有的是不同类型数组(整数、字符串等)的重载构造函数。但是这个类还需要创建一个类数组,那么我怎样才能传入一个类名并让我的 Array 类创建一个该类的数组呢?

我可以将它硬编码到我知道我将制作一个数组的类中,但我想让我的 Array 类具有足够的通用性,以便在我将来制作的任何类中使用它。

【问题讨论】:

标签: java arrays class


【解决方案1】:

你可以这样做:

public class Array<T> {
    private final T[] arr;

    public Array(final int size, final Class<T> clazz) {
        this.arr = createArray(size, clazz);
    }

    private T[] createArray(final int size, final Class<T> clazz) {
        return (T[]) java.lang.reflect.Array.newInstance(clazz, size);
    }
}

您可以通过以下方式调用实例化:

final Array<String> strings = new Array<>(5, String.class);

我还会为您的类建议一个不同的名称,因为 Java API 已经使用了 Array

【讨论】:

  • “T”是什么意思?这段代码会进入我的 Array 类吗?因此,当我在其他地方的代码中实例化该类时,我可以传入类型和大小吗?还有你为什么在这里使用 final 关键字?
  • T 是泛型类型。你可以在这里了解更多信息:docs.oracle.com/javase/tutorial/java/generics/types.html
  • 我已经修改了我的示例,希望您能更清楚地了解如何在课堂上使用它。当您不需要变量或字段是可变的时,使用 final 只是一个好习惯。即使没有 final 也可以工作。
【解决方案2】:

正如@andresp 所说,您可以使用数组作为私有字段创建一个新类。除了类型参数之外,另一个避免将Class&lt;T&gt; 作为参数传递的选项是将数组替换为java.util.ArrayList,它的功能与数组一样,但有一些不同。

例如:

public class MyArray {
    private final java.util.ArrayList arr;
    public MyArray(java.util.ArrayList arr) {
        this.arr = arr;
    }

    // Add your additional methods here.
}

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多