Java — возвращает разные методы

#java

#java

Вопрос:

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

 protected final FormatRate load(String urlToSite, SiteLoader.Currency currencyName){

    StringBuilder content;
    boolean error;
    int retryCount = 0;
    do{
        content = new StringBuilder();
        error = false;
        try {
            // create a url object
            HttpURLConnection con = (HttpURLConnection) new URL(urlToSite).openConnection();

            con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");
            con.setConnectTimeout(50000); //set timeout to 50 seconds
            con.setReadTimeout(50000); //set timeout to 50 seconds

            try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()))){
                String line;
                while ((line = bufferedReader.readLine()) != null)
                {
                    content.append(line).append("n");
                }
            }
        }
        catch(Exception e)
        {
            error = true;
            retryCount  ;
            System.err.println(""    e.getMessage());
        }
    } while (error amp;amp; retryCount < 5);

    if(error){
        throw new RuntimeException("");
    }
    return handle(content.toString(), currencyName);
}
  

Это мой дескриптор метода:

     protected abstract FormatRate handle(String content, Currency currencyName);
  

И его реализация:

 @Override
     protected FormatRate handle(String content, Currency currencyName) {

        int indexRate = content.indexOf(strForRate);
        int indexDate = content.indexOf(strForDate);
        int indexScale = content.indexOf(strForScale);
        int indexAbbreviation = content.indexOf(strForAbbreviation);

        String scale = "";

        if (currencyName.getId().equals(Currency.RUB.getId())) {
            scale = content.substring(indexScale   11, indexScale   14);
        } else {
            scale = content.substring(indexScale   11, indexScale   12);
        }

        return new FormatRate(content.substring(indexRate   18, indexRate   24),
                                scale,
                                content.substring(indexAbbreviation   19, indexAbbreviation   22),
                                content.substring(indexDate   7, indexDate   26));
    }
  

Мой вопрос: мне нужно добавить новый метод handle , который вернет коллекцию. Он будет вызываться при вызове метода load с тремя параметрами. Я не понимаю, как это реализовать…

Методы load также объявляются абстрактными в классе

 @Override
public FormatRate load(Currency currencyName) {
    return load("https://www.nbrb.by/api/exrates/rates/"   currencyName.getId(), currencyName);
}

@Override
public FormatRate load(Currency currencyName, String date) {
    return load("https://www.nbrb.by/api/exrates/rates/"   currencyName.getId()   "?ondate="   date, currencyName);
}

@Override
public FormatRate load(Currency currencyName, String dateFrom, String dateTo) {
    return load("https://www.nbrb.by/api/exrates/rates/dynamics/"   currencyName.getId()  
            "?startDate="   dateFrom   "amp;endDate="   dateTo, currencyName);
}
  

Комментарии:

1. Вам нужно перегрузить метод handle и изменить тип значения, которое возвращает метод? Перегруженный метод должен возвращаться Collection , а не FormatRate ?

2. @Abra Да, это верно. Метод должен возвращать a Set<FormatRate> . И в методе load handle вызывается нужный мне метод

3. Вы не можете перегружать методы разными типами возвращаемых данных. Вы можете перегружать методы только с разным количеством параметров или разными типами параметров.

4. @Abra Я понимаю, что мне нужно изменить аргументы для метода перегрузки, но я не могу понять, как я могу вернуть один из моих методов ‘handle’.