Я знаю, что языки с более динамичной, чем Java, такие как Python и Ruby, часто позволяют размещать объекты смешанных типов в массивах, например:
["hello", 120, ["world"]]
Я не понимаю, почему вы когда-либо использовали такую функцию. Если я хочу хранить гетерогенные данные в Java, я обычно создаю для него объект.
Например, скажем, a User
имеет int ID
и String name
. Хотя я вижу, что в Python/Ruby/PHP вы можете сделать что-то вроде этого:
[["John Smith", 000], ["Smith John", 001], ...]
это кажется немного менее безопасным /OO, чем создание класса User
с атрибутами ID
и name
, а затем с вашим массивом:
[<User: name="John Smith", id=000>, <User: name="Smith John", id=001>, ...]
где эти объекты <User ...>
представляют объекты пользователя.
Есть ли причина использовать первый над последним в языках, которые его поддерживают? Или существует какая-то большая причина использовать гетерогенные массивы?
N.B. Я не говорю о массивах, которые включают в себя разные объекты, которые реализуют один и тот же интерфейс или наследуют от одного и того же родителя, например:
class Square extends Shape
class Triangle extends Shape
[new Square(), new Triangle()]
поскольку это, по крайней мере, для программиста, по-прежнему является однородным массивом, поскольку вы будете делать то же самое с каждой фигурой (например, вызывая метод draw()
), только методы, обычно определяемые между ними.