我知道比Java更具动态性的语言,如Python和Ruby,通常允许你将混合类型的对象放入数组中,像这样:
["hello", 120, ["world"]]
我不理解为什么会使用这样的功能。如果我想在Java中存储异构数据,通常会创建一个对象来处理。
例如,假设一个具有ID和name属性。虽然我知道在Python/Ruby/PHP中可以这样做:
[["John Smith", 000], ["Smith John", 001], ...]
这种方式似乎比创建一个带有属性 ID
和 name
的类 User
并将其放入数组中要不太安全/面向对象。
但是这只是个人意见。
[<User: name="John Smith", id=000>, <User: name="Smith John", id=001>, ...]
这里的 <User ...>
表示 User 对象。
在支持这种语言特性的语言中,使用前者而不是后者有何优势?或者说,使用异构数组有更大的原因吗?
N.B. 我说的不是包含不同对象但都实现了相同接口或继承自相同父类的数组,例如:
class Square extends Shape
class Triangle extends Shape
[new Square(), new Triangle()]
因为对于程序员来说,这仍然是一个同质数组,因为您将对每个形状执行相同的操作(例如,调用draw()
方法),只有两者之间通常定义的方法不同。
((String) name, (int) id)
的对象,语言可以在某人编写错误代码时发送错误信息,例如name,id,email
。 - Aaron Yodaiken