将任何类型的ArrayList传递给方法

时间:2012-07-31 07:15:48

标签: java android generics

我正在开发我的第一个Android应用程序,一个适合我孩子的数学游戏,并且正在学习Java。我有两个ArrayList,一个整数0..9和一个可能的操作字符串,目前只有+-

我想编写一个方法,将随机索引返回到ArrayList,这样我就可以选择一个随机元素。我遇到的是我需要两种方法,每种类型ArrayList一种,即使代码是相同的。有没有办法用一种方法做到这一点?

我现在使用的是:

Random randomGenerator = new Random();

  . . .

n = randomIndexInt(possibleOperands);
int op1 = possibleOperands.get(n);
n = randomIndexInt(possibleOperands);
int op2 = possibleOperands.get(n);
n = randomIndexStr(possibleOperations);
String operation = possibleOperations.get(n);

    . . .

int randomIndexInt(ArrayList<Integer> a){
    int n = randomGenerator.nextInt(a.size());
    return n;
}

int randomIndexStr(ArrayList<String> a){
    int n = randomGenerator.nextInt(a.size());
    return n;
}

我想要做的是将randomIndexIntrandomIndexStr折叠为一种方法。

7 个答案:

答案 0 :(得分:17)

将您的方法声明为int randomIndexInt(ArrayList<?> a)

答案 1 :(得分:7)

你只需要数组的大小吗? 这样做:

int randomIndex(int size){
    int n = randomGenerator.nextInt(size);
    return n;
}

答案 2 :(得分:5)

使用此代码,您可以传递任何类型的列表

int randomIndex(List<?> list){
    int n = randomGenerator.nextInt(list.size());
    return n;
}

答案 3 :(得分:2)

就这样做:

private int randomIndex(int size){
return randomGenerator(size);
}

然后使用randomIndex(yourArray.size());

调用它们

答案 4 :(得分:2)

更通用的是在方法签名中使用List而不是ArrayList

int your_method(List<?> a){
//your code
}

答案 5 :(得分:1)

您可以使用Generics,如下所示

声明你的功能如下

private <T> int randomIndex(ArrayList<T> a){
    int n = randomGenerator.nextInt(a.size());
    return n;
}

现在您可以将ArrayList<String>ArrayList<Integer>传递给此函数,而不会出现此类问题

ArrayList<String> strList = new ArrayList<String>();
strList.add("on1");
System.out.println(randomIndex(strList));
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
System.out.println(randomIndex(intList));

答案 6 :(得分:0)

int randomIndex1(ArrayList<?> a)
{
   int n = randomGenerator.nextInt(a.size());
   return n;
}

int randomIndex2(int size)
{
   int n = randomGenerator.nextInt(size);
   return n;
}