Java 如何使用反射返回二维数组?
代码的目的 在Java 如何使用反射返回二维数组?,java,arrays,Java,Arrays,代码的目的 在DataStoragePics类中,通过将屏幕上的图片与已存在的一组像素(以返回2D数组的方法的形式)进行比较,找出屏幕上的图片 我是如何试图解决它的 使用反射,我将DataStoragePics类中的所有方法存储在methodStorage[]中 然后我从methodStorage[]调用一个方法,该方法随后将存储在tempMatrix[][]中 使用循环和另一种方法(此处未显示),我稍后将使用它来找出捕获的像素集是什么类型的图片 我需要什么帮助 当我尝试使用上述步骤解决问题时,
DataStoragePics
类中,通过将屏幕上的图片与已存在的一组像素(以返回2D数组的方法的形式)进行比较,找出屏幕上的图片
我是如何试图解决它的
DataStoragePics
类中的所有方法存储在methodStorage[]
中methodStorage[]
调用一个方法,该方法随后将存储在tempMatrix[][]
中李>
methodStorage[x].invoke(DataStoragePicsObj)
是一个数组,但它返回一个二维数组,程序无法识别,因此它需要tempMatrix
作为简单数组,或者methodStorage[]
作为二维数组。我需要帮助解决那个错误
这是Main
类:
import java.lang.reflect.Method;
int [][] tempMatrix = new int[16][450];
//Creates a DataStoragePics Object.
DataStoragePics DataStoragePicsObj = new DataStoragePics();
//Stores all DataStoragePics methods in methods[].
Method[] methodStorage = DataStoragePicsObj.getClass().getMethods();
//Loops through methodStorage[].
for(int x = 0; x < method.length; x++)
{
//Stores a 2D array from DataStoragePics class in tempMatrix.
//All methods in DataStoragePics return a 2D array with [16][10] dimensions.
/*This is the error line*/
tempMatrix[16][10] = methodStorage[x].invoke(DataStoragePicsObj);
/*above is the error line*/
}
说到java/编码,我是一个初学者,所以请不要使用复杂的术语
教学大纲的答案对我有所帮助,但我仍然得到了这个错误:“线程中的异常”main“java.lang.ClassCastException:java.lang.Class不能转换为[[I”事情是铸造,它存储和返回屏幕上的东西。有时它显示错误,在最后,有时在中间。不知道为什么。< /强> 实际上,没有“CAST”,编译器只考虑<代码>调用Ky/<代码>返回<代码>对象< /代码> .<
tempMatrix[16][10]
表示tempMatrix
数组中的元素(16,10),因此其类型为int
因此,将对象分配给int会引发编译器错误:“=”后面的类型必须是“相同的”
首先,必须将调用返回的对象强制转换为int[][]
。
然后您必须指定给int[][]对象(完整的tempMatrix?)
您正在遍历类中的所有方法,并将每个方法的返回值强制转换为
int[][]
Method[] methodStorage = DataStoragePicsObj.getClass().getMethods();
//Loops through methodStorage[].
for(int x = 0; x < method.length; x++)
什么是
tempMatrix
的类型?您还没有向我们展示如何创建它。DataStoragePics类中的所有方法都返回int[][]没有任何其他返回类型的方法没有void方法,没有int方法,没有double,没有char,没有string,没有float,没有int[],这些类型都只是int[]@user3144079请再次阅读我的答案。DataStoragePicsObj
从java.lang.Object
继承方法(就像任何java类一样,您不能抑制此操作),为什么不试试我的解决方案并检查它是否有效?@user3144079如果您添加语句System.out.println(methodStorage[x].getName())
您会发现导致异常的方法名为getClass
。我尝试了解决方案,并执行了getName()操作,现在我明白了,问题已经解决。感谢您在回答后抽出时间。
tempMatrix = (int[][]) methodStorage[x].invoke(DataStoragePicsObj);
Method[] methodStorage = DataStoragePicsObj.getClass().getMethods();
//Loops through methodStorage[].
for(int x = 0; x < method.length; x++)
Method m = methodStorage[x];
if (m.getReturnType() != int[][].class || m.getParameterTypes().length != 0) {
// Skip this method because it requires arguments or doesn't return int[][]
continue;
}