Я знаю, что языки с большей динамичностью, чем Java, такие как Python и Ruby, часто позволяют помещать объекты смешанных типов в массивы, например:
["hello", 120, ["world"]]
Чего я не понимаю, так это того, почему вы бы использовали такую функцию. Если я хочу хранить разнородные данные в Java, я обычно создаю для них объект.
Например, скажем, 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. Я не говорю о массивах, которые включают разные объекты, которые все реализуют один и тот же интерфейс или наследуют от одного и того же родителя, например ::1010*
class Square extends Shape
class Triangle extends Shape
[new Square(), new Triangle()]
потому что это, по крайней мере, для программиста по-прежнему однородный массив, поскольку вы будете делать то же самое с каждой формой (например, вызывая метод draw()
), только методы, обычно определяемые между ними. 1027 *