在Java中创建类数组(不是对象)?
我想创建一个类数组,而不是对象数组。我希望能够访问具有相同名称的每个类的静态函数,如下所示:在Java中创建类数组(不是对象)?,java,arrays,class,Java,Arrays,Class,我想创建一个类数组,而不是对象数组。我希望能够访问具有相同名称的每个类的静态函数,如下所示: for (int i = 0; i < array.length; ++i) { array[i].staticMethod(); } for(int i=0;i
for (int i = 0; i < array.length; ++i) {
array[i].staticMethod();
}
for(int i=0;i
其中,数组[i]在语法上可以与类的名称互换,如
Integer
您定义了一个类数组,如下所示:
Class<?>[] classArray = new Class<?>[10];
Class[]classArray=新类[10];
您可以这样定义一个类数组:
Class<?>[] classArray = new Class<?>[10];
Class[]classArray=新类[10];
除了在数组中使用Class
对象,Class[]array=newclass[10]
,然后反射性地调用静态方法,例如
array[i].getMethod("staticMethod", ArgType1.class, ArgType2.class)
.invoke(null, arg1, arg2);
考虑到您声明的目标,这是Java中最接近的近似值。不能将小写字母cclass
es存储为变量或数组中的数据
编辑:考虑到您所声明的对排序算法的效率进行基准测试的目标,那么反射开销将使这些结果产生令人不快的偏差。您最好找到另一种编写它的方法,而不是尝试用一个类数组来编写它,因为这样做实际上是行不通的
如果您使用的是Java8,那么我可能会编写以下内容
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());
}
在这两种情况下,关键的目标都是创建一个对象列表,该列表实现了一个可用于排序的已知方法,而不是试图神奇地创建一个类列表,并调用一个在每个类中都具有相同名称的方法。除了在数组中使用
类对象之外,您实际上没有任何选择,Class[]array=newclass[10]
,然后反射性地调用静态方法,例如
array[i].getMethod("staticMethod", ArgType1.class, ArgType2.class)
.invoke(null, arg1, arg2);
考虑到您声明的目标,这是Java中最接近的近似值。不能将小写字母cclass
es存储为变量或数组中的数据
编辑:考虑到您所声明的对排序算法的效率进行基准测试的目标,那么反射开销将使这些结果产生令人不快的偏差。您最好找到另一种编写它的方法,而不是尝试用一个类数组来编写它,因为这样做实际上是行不通的
如果您使用的是Java8,那么我可能会编写以下内容
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());
}
在这两种情况下,关键的目标都是创建一个对象列表,这些对象实现了一个可用于排序的已知方法,而不是试图神奇地创建一个类列表并调用一个恰好在每个类中具有相同名称的方法。我还必须向数组的类型添加一个基函数,如:classSuperClass{public static void staticMethod(){}
,但我尝试使用类
类这样做,但由于类被声明为final
,它失败了。我想知道这是否可能是一个。您试图用此构造解决的总体问题是什么?据我所知,如果不使用该方法,您无法以多态方式访问类的方法在基类中声明。我不能在class
中这样做。这个方法需要是静态的,因为…?“如果沿着这条路径走下去,只会有痛苦。”--Yoda。我还必须向数组的类型添加一个基函数,比如:class超类{public static void staticMethod(){}
,但我尝试使用类
类这样做,但由于类被声明为final
,它失败了。我想知道这是否可能是一个。您试图用此构造解决的总体问题是什么?据我所知,如果不使用该方法,您无法以多态方式访问类的方法在基类中声明。我不能在类中执行此操作。此方法需要是静态的,因为…?“如果沿着这条路径走下去,您只会感到痛苦。”--Yoda.但您不能调用StaticMethod您必须使用reflection,但不能调用StaticMethod您必须使用reflection