我想在不同的时间将不同类型的参数类型数组传递给一个方法/函数,该方法/函数随机返回一个元素,但是使用Java这样做非常麻烦。
我尝试使用以下代码进行操作:
public int rndInx(Array theArray) {
theArray = theArray[(int)(Math.random() * theArray.length)];
return theArray;
}
但是,Eclipse提请注意错误; 长度未解析,并且表达式的类型必须为数组类型。我认为问题的一个原因是returnType,但是我不确定哪种类型会接受一定范围的returnTypes。我知道语法可能也非常错误,因为我只是最近才开始学习Java:(
例如,如果我要传递一个包含整数的数组,则将返回一个随机整数元素-如果我要传递一个包含字符串等的数组,则将从该数组中返回一个随机元素。
谢谢。
答案 0 :(得分:4)
以下是实现最终目标的步骤。
rndInx
参数int[]
,double[]
等重载方法long[]
。这是通用方法的提示:
public <T> T rndInx(T[] theArray) {
return theArray[....]; // return the element at a random index
}
答案 1 :(得分:2)
您可以使用通用方法:
android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer
但这不适用于基本数组。如果必须接受原始数组,则必须使用反射并希望调用方具有正确的类型:
lofl = []
for row in data:
headers = [e[0] for e in lofl]
if row[0] in headers:
lofl[headers.index(row[0])].extend(row[1:])
else:
lofl.append(list(row))
或返回lofl
并让呼叫者进行转换。
答案 2 :(得分:1)
您想要的是使用泛型,例如像这样:
public <T> T selectOneRandomly(T[] array) {
return array[(int)(Math.random() * array.length)];
}
这应适用于除int
,double
等原语以外的所有内容。
对于那些,您要么必须通过重载提供特殊的方法(例如int selectOneRandomly(int[] array)
),要么将原始数组转换为包装类型的数组(例如,将int[]
转换为Integer[]
),然后再传递已转换的数组添加到您的方法。