Как обрабатывать динамически переменную нет.параметров в java? - PullRequest
0 голосов
/ 25 сентября 2019

Запрос на получение маршрутов из Google API выглядит следующим образом.

DirectionsApi.newRequest(getGeoContext())
                    .mode(TravelMode.DRIVING)
                    .origin(origin)
                    .destination(destination)
                    .waypoints(getWaypointsString(waypoints))
                    .departureTime(now)
                    .optimizeWaypoints(true)
                    .await();

.waypoints - это метод с переменным количеством параметров:

public DirectionsApiRequest waypoints(java.lang.String... waypoints)

Теперь моя проблемазаключается в том, что мне придется обновлять свой маршрут динамически, и с этим количество точек маршрута может меняться.Я могу справиться с этим вручную следующим образом:

.waypoints(Latlng1)
.waypoints("Latlng1","Latlng2") 

В любом случае, я могу написать общий метод для этого или как с ним справиться, если я не знаю, сколько путевых точек я получу?

1 Ответ

1 голос
/ 25 сентября 2019

Запись ... - это просто скрытый способ передачи массива.Так что на самом деле внутри waypoints метода у вас есть параметр java.lang.String[] waypoints, а это массив.Таким образом, вы можете узнать его длину и прочитать его элементы один за другим:

public DirectionsApiRequest waypoints(java.lang.String... waypoints) {
   int numOfWayPoints = waypoints.length;
   for (int i = 0 ; i < numOfWayPoints ; i++) {
      doSomethingWithTheWayPoint(waypoints[i]);
   }
   // or
   for (java.lang.String waypoint : waypoints) {
      doSomethingWithTheWayPoint(waypoint);
   }
}

, чтобы вызвать такой метод, вы можете сделать это в обратном порядке: просто передать массив в качестве последнего параметра:

   java.lang.String[] waypoints = {"Ltlng1", "Ltlng2"}; // fill the array
   .... 
   .waypoints(waypoints); // call the method, passing the array instead of a list of parameters

   // or
   ArrayList<java.lang.String> waypointsList = new ArrayList<>();
   waypointsList.add("Ltlng1");
   waypointsList.add("Ltlng2"); 
   // etc
   .... 
   .waypoints(waypointsList.toArray(new java.lang.String[])); // call the method, passing the array of strings obtained from a list
...