我知道比Java和Ruby更动态的Java语言通常允许您将混合类型的对象放在数组中,如下所示:
["hello", 120, ["world"]]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么你会使用这样的功能.如果我想在Java中存储异构数据,我通常会为它创建一个对象.
例如,说a Userhas int ID和String name.虽然我在Python/Ruby/PHP中看到你可以这样做:
[["John Smith", 000], ["Smith John", 001], ...]
Run Code Online (Sandbox Code Playgroud)
这似乎有点不太安全/ OO不是创建一个类User具有属性ID和name,然后让你的数组:
[<User: name="John Smith", id=000>, <User: name="Smith John", id=001>, ...]
Run Code Online (Sandbox Code Playgroud)
这些<User ...>东西代表用户对象.
是否有理由在支持它的语言中使用前者而不是后者?或者是否有更大的理由使用异构数组?
NB我不是在谈论包含所有实现相同接口或从同一父接口继承的不同对象的数组,例如:
class Square extends Shape
class Triangle extends Shape
[new Square(), new Triangle()]
Run Code Online (Sandbox Code Playgroud)
因为对于程序员来说,至少仍然是一个同质数组,因为你将对每个形状做同样的事情(例如,调用draw()方法),只有两者之间通常定义的方法.