Передача ArrayList любого типа методу

Я работаю над своим первым Android-приложением, математической игрой для своего ребенка и изучаю Java в этом процессе. У меня есть два ArrayList s, один из целых чисел 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; } 

То, что я хотел бы сделать, это свернуть randomIndexInt и randomIndexStr в один метод.

Solutions Collecting From Web of "Передача ArrayList любого типа методу"

int randomIndexInt(ArrayList<?> a) свой метод как int randomIndexInt(ArrayList<?> a)

Вам нужен только размер массива? так сделай это:

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

С помощью этого кода вы можете передать любой тип списка

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

Просто сделайте это:

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

Затем вызовите их с помощью randomIndex(yourArray.size());

Более общим является использование List чем ArrayList в сигнатуре метода.

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

Вы можете использовать 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)); 
 int randomIndex1(ArrayList<?> a) { int n = randomGenerator.nextInt(a.size()); return n; } int randomIndex2(int size) { int n = randomGenerator.nextInt(size); return n; }