public class ImageReaderFactory {
public static ImageReader getImageReader(ImageTypes image){
if(image.equals(ImageTypes.BMP)){
return new BmpReader();
}else if(image.equals(ImageTypes.JPG)) {
return new JpgReader();
}
else if(image.equals(ImageTypes.PNG)) {
return new PngReader();
}else
throw new IllegalArgumentException("Неизвестный тип картинки");
}
}
TIPUN
17 уровень
Почему не принимает решение через equals?
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #3303140
7 июля 2025, 08:02
Почему не принимает, сказать не могу, потому что equals в целом работает с енамами. Другой момент в том, что использовать его для енамов не следует. Equals для чего вообще нужен? Он сравнивает объекты "по существу", то есть когда есть два отдельных объекта, каждый по своей ссылке, но по существу они одинаковые - их поля содержат одинаковые значения. Получается, эти объекты эквивалентны, и вместо одного можно использовать другой. С перечислениями (енамами) это не требуется, потому что внутри енама перечисляются ВСЕ объекты этого класса. То есть не существует других объектов класса ImageTypes кроме JPG, PNG и BMP. Соответственно, в переменной image лежит ссылка на один из этих трёх объектов, и енамы можно сравнивать по ссылке, через "==".
В силу своей специфики енамы часто хранят типы какой-то сущности, и часто случаются ситуации, когда несколько разных классов названы одинаково. При сравнении по ссылке через "==" ты их не перепутаешь, потому что это проверяется на этапе компиляции, тогда как сравнение через equals позволяет сравнивать объекты разных типов. Это одна из причин не использовать equals для енамов.
0