我知道比Java和Ruby更动态的Java语言通常允许您将混合类型的对象放在数组中,如下所示:
["hello", 120, ["world"]]
我不明白为什么你会使用这样的功能。如果我想在Java中存储异构数据,我通常会为它创建一个对象。
例如,假设User具有int ID和String name。虽然我在Python / Ruby / PHP中看到你可以这样做:
[["John Smith", 000], ["Smith John", 001], ...]
这似乎比创建一个属性ID和name的类User然后拥有你的数组更安全/ OO:
[, , ...]
其中事物代表用户对象。
是否有理由在支持它的语言中使用前者而不是后者?或者是否有更大的理由使用异构数组?
注:我不是在讨论包含所有实现相同接口或从同一父接口继承的不同对象的数组,例如:
class Square extends Shape
class Triangle extends Shape
[new Square(), new Triangle()]
因为对于程序员而言,至少仍然是一个同质数组,因为你将对每个形状做同样的事情(例如,调用draw()方法),只有两者之间通常定义的方法。
Python或Ruby是动态类型的,因此异构数组是"免费"实现的。
"这似乎不太安全"?"安全"是什么意思?请注意,"类型安全"是Python中的绝对保证,因为对象的类型与某些方式无法通过