Java-使用不同变量类型的值参数调用方法
我有一堆变量声明为2D数组:Java-使用不同变量类型的值参数调用方法,java,variables,methods,parameters,Java,Variables,Methods,Parameters,我有一堆变量声明为2D数组: int[][] array1 = {{}}; int[][] array2 = {{}}; etc.. 我目前正在使用一个方法调用另一个方法,其中一个变量作为带有开关的参数: public void invokeMethod(){ switch(variableNumber){ case 1: method(piece1); break; case 2: method(piece2); break; etc.. } }
int[][] array1 = {{}};
int[][] array2 = {{}};
etc..
我目前正在使用一个方法调用另一个方法,其中一个变量作为带有开关的参数:
public void invokeMethod(){
switch(variableNumber){
case 1: method(piece1);
break;
case 2: method(piece2);
break;
etc..
}
}
这感觉像是处理这个问题的一种非常愚蠢的方式,有更聪明的解决方案吗?也许将变量存储在数组中?如果我面对数千个2D数组,我想做的是使用不同数据类型的变量值调用该方法,如下所示:
String arrayToBeInvokedWith = "array1";
method(arrayToBeInvokedWith){
}
(是的,我知道这太简单了,但你可以从中得到想法)
有类似的解决方案吗?非常感谢您的反馈
编辑:所有数组都具有相同的大小。而不是声明一组单独的数组 编写一个封装二维数组实例的类 如果然后使用类型为特殊数组类的泛型集合,则可以将数组的所有实例放入单个集合中 然后,当需要对数组进行操作时,只需迭代集合即可 或者,如果必须将特定标识与每个2D数组对象关联,则将该标识关联为HashMap中对象的键。然后,当您需要对任何一个数组进行操作时,您可以使用其键从映射中检索它 代替
public void invokeMethod(){
switch(variableNumber){
case 1: method(piece1);
break;
case 2: method(piece2);
break;
:
:
}
}
你可以简单地使用
public <T extends MyArrayClass> void invokeMethod(String arrKey, HashMap<String,T>
arrays) {
T my2dArray = arrays.get(arrKey);
method(my2dArray);
:
:
}
public void invokeMethod(字符串arrKey,HashMap
阵列){
T my2dArray=arrays.get(arrKey);
方法(my2dArray);
:
:
}
当遇到像您这样的问题时,解决方案通常是创建一个表示数据抽象的新类型。您真的需要使用数组吗?可以使用HashMap存储引用一个数组的键。要获取一个数组,只需传递数组的键并获取它
HashMap<String, int[]> hashMap = new HashMap<String, int[]>();
int array1[] = {1, 2};
int array2[] = {2, 3};
int array3[] = {3, 4};
hashMap.put("array1", array1);
hashMap.put("array2", array2);
hashMap.put("array3", array3);
int arrayWanted[] = hashMap.get("array2");
HashMap HashMap=newhashmap();
int-array1[]={1,2};
int-array2[]={2,3};
int-array3[]={3,4};
hashMap.put(“array1”,array1);
hashMap.put(“array2”,array2);
hashMap.put(“array3”,array3);
int arrayWanted[]=hashMap.get(“array2”);
我认为您在设计上有问题。根据经验,方法的主体不应该知道它之外的范围,除非该范围以某种方式作为参数提供。如果您有一个在不同的int[][]
上运行的方法,并且需要根据对象的引用进行不同的操作,那么您应该传递第二个指定上下文的参数,然后在该方法内对该参数进行操作。太好了,这看起来太完美了!谢谢HashMap可能有些过分,但关键是定义一种数据类型,作为数据的抽象。您可以使用数组、列表或任何最适合您需要的东西。我想你不想做的是声明一堆2d数组,然后在它们上使用一个很大的开关。