Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Светлана Art Ученик (168), закрыт 2 недели назад
     public static void WriteToFile(ArrayList 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 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());
}
}
Ошибка:

Помогите пожалуйста, как сделать правильнее
Лучший ответ
Папа Высший разум (135012) 1 месяц назад
У этих методов одинаковое erasure, т.е. типы параметров становятся одинаковыми после удаления из них параметров generics. Java не позволяет делать перегрузки таким образом. Либо называйте методы по-разному, либо добавляйте параметры. Да у вас и реализация-то одинаковая, пользуйтесь параметрическим полиморфизмом:
 public static  void WriteToFile(ArrayList 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 перегрузка тоже через одно место сделана... можно так тогда:
 public static  void WriteToFile(ArrayList 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 принято с маленькой буквы называть, это не сишарп.
Остальные ответы
Похожие вопросы