Top.Mail.Ru
Ответы

Перегрузка методов java

1234567891011121314151617181920212223242526272829
     public static void WriteToFile(ArrayList<Integer> listInteger, String filePath, boolean append) 
    { 
        try(FileWriter writer = new FileWriter(filePath, append)) 
        { 
            for (Integer integer : listInteger) { 
                writer.write(integer); 
            } 
            writer.append('\n'); 
            writer.flush(); 
        } 
        catch(IOException ex){ 
            System.out.println(ex.getMessage()); 
        } 
    } 
 
    public static void WriteToFile(ArrayList<String> list, String filePath, boolean append) 
    { 
        try(FileWriter writer = new FileWriter(filePath, append)) 
        { 
            for (String string : list) { 
                writer.write(string); 
            } 
            writer.append('\n'); 
            writer.flush(); 
        } 
        catch(IOException ex){ 
            System.out.println(ex.getMessage()); 
        } 
    } 

Ошибка:

Помогите пожалуйста, как сделать правильнее

По дате
По Рейтингу
Аватар пользователя
Новичок
11мес

У этих методов одинаковое erasure, т.е. типы параметров становятся одинаковыми после удаления из них параметров generics. Java не позволяет делать перегрузки таким образом. Либо называйте методы по-разному, либо добавляйте параметры. Да у вас и реализация-то одинаковая, пользуйтесь параметрическим полиморфизмом:

1234567891011121314
 public static <T> void WriteToFile(ArrayList<T> list, String filePath, boolean append)
    {
        try(FileWriter writer = new FileWriter(filePath, append))
        {
            for (Object o : list) {
                writer.write(o);
            }
            writer.append('\n');
            writer.flush();
        }
        catch(IOException ex){
            System.out.println(ex.getMessage());
        }
    } 

Эта штука заменяет оба метода.

Хотя там у Writer перегрузка тоже через одно место сделана... можно так тогда:

1234567891011121314151617
 public static <T> void WriteToFile(ArrayList<T> list, String filePath, boolean append)
    {
        try(FileWriter writer = new FileWriter(filePath, append))
        {
            for (Object o : list) {
                if (o instanceof Integer)
                    writer.write((Integer)o);
                else
                    writer.write(String.valueOf(o));
            }
            writer.append('\n');
            writer.flush();
        }
        catch(IOException ex){
            System.out.println(ex.getMessage());
        }
    } 

Не очень красиво с этим instanceof внутри, но по крайней мере не дублируем целый метод.

Да, и методы в Java принято с маленькой буквы называть, это не сишарп.