IS
оставил public class Army<T extends Unit & Race>
public T getRandomUnit() {
ArrayList<Unit> units = new ArrayList<>();
units.addAll(cavalry);
units.addAll(infantry);
return units.isEmpty() ? null : (T) units.get((int) (Math.random() * units.size()));
}
public T getRandomUnit(T unit) {
if (unit instanceof Cavalry) return (T) cavalry.get((int) (Math.random() * cavalry.size()));
if (unit instanceof Infantry) return (T) infantry.get((int) (Math.random() * infantry.size()));
return null;
}