У меня есть два почти одинаковых метода, но я стараюсь избегать дублирования кода.
Каждый из них принимает уникальный объект в качестве аргументов и обнаруживает самое высокое значение из него.
Вот пример:
public Integer getHighestIndexValue(List<ObjectA> list) {
int highestValue;
List<Integer> indexes = new ArrayList<Integer>();
for (ObjectA a: list) {
indexes.add(Integer.parseInt(a.getA()));
}
highestValue = Collections.max(indexes);
return highestValue;
}
Или:
public Integer getHighestIndexValue(List<ObjectB> list) {
int highestValue;
List<Integer> indexes = new ArrayList<Integer>();
for (ObjectB b: list) {
indexes.add(Integer.parseInt(b.getB()));
}
highestValue = Collections.max(indexes);
return highestValue;
}
Как объединить эти два с помощью общих параметров?
Я попытался создать BaseClass
, который содержит эти два класса и расширил его в сигнатуре метода. Тем не менее это требует кастинга.
public <T extends BaseClass> Integer getHighestIndexValue(List<T> objectList) {
int highestValue;
List<Integer> indexes = new ArrayList<Integer>();
for (T objects: objectList) {
indexes.add(Integer.parseInt(objects.getAorB())); ------ this line needs casting
}
highestValue = Collections.max(indexes);
return highestValue;
}
Я использовал параметры Generics до, но не generics.
Есть ли способ решить эту проблему?