gpt4 book ai didi

java - 在 Java 中创建类数组(而不是对象)?

转载 作者:行者123 更新时间:2023-12-01 10:46:59 25 4
gpt4 key购买 nike

我想创建一个类数组,而不是对象数组。我希望能够访问具有相同名称的每个类的静态函数,如下所示:

for (int i = 0; i < array.length; ++i) {
array[i].staticMethod();
}

其中 array[i] 在语法上可以与类名称互换,例如 Integer

最佳答案

你别无选择,只能使用 Class数组中的对象Class<?>[] array = new Class<?>[10] ,然后反射调用静态方法,例如

array[i].getMethod("staticMethod", ArgType1.class, ArgType2.class)
.invoke(null, arg1, arg2);

鉴于您所声明的目标,这是 Java 中最接近的目标。你不能有小写-c class es 存储为变量或数组中的数据。

编辑:鉴于您既定的目标是对排序算法的效率进行基准测试,那么反射开销将使这些结果产生令人不快的偏差。您最好找到另一种方式来编写它,而不是尝试使用一组类来编写它,因为这实际上不会起作用。

如果你使用 Java 8,那么我可能会写类似的内容

List<Consumer<int[]>> sorters = Arrays.asList(
Sort1::sort, Sort2::sort, Sort3::sort);
for (Consumer<int[]> sorter : sort) {
int[] array = createNewRandomArray();
sorter.accept(array);
}

如果你不是,那么我会写类似的内容

   enum SortingVariant {
SORT1 {
@Override void sort(int[] array) { Sort1.sort(array); }
},
SORT2 {
@Override void sort(int[] array) { Sort2.sort(array); }
};
abstract void sort(int[] array);
}

for (SortingVariant sorter : SortingVariant.values()) {
sorter.sort(getNewRandomArray());
}

在这两种情况下,关键目标是创建一个实现可用于排序的已知方法的对象列表,而不是尝试神奇地创建一个类列表并调用恰好具有相同方法的方法每个人的名字。

关于java - 在 Java 中创建类数组(而不是对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34123887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com