*as we know that scala array contains data of the same type. But when I declared array as
var a = new Array[Any](3)
I am able to store different data types.
a(0)=5
a(1)="hello"
a(2)=1.5
how is it possible? if it is wrong then what is the option we have in scala to store different data types?*
The notion of "same type" always depends on a level of generality. In Scala, the level of generality is determined by formal type.
Are 3 and 7 "of the same type"? If we write...
val a : Int = 3
val b : Int = 7
then they of of the same type Int
. But, if we define bit-length restricted Int
types (which we are very welcome to do in Scala), we might write
val a : Int2 = 3
val b : Int3 = 7
and they no longer appear to be of the same type!
If we define an inheritance hierarchy
trait Animal;
class Dog extends Animal;
class Frog extends Animal;
then do Dog
and Frog
have the same type? If we write
val d : Dog = new Dog
val f : Frog = new Frog
then it looks like the answer is no. But if we write
val d : Animal = new Dog
val f : Animal = new Frog
then they look like they do have the same type. Consistent with that, if I declare an array like
val arr : Array[Dog] = Array.ofDim[Dog](5)
then I can't put a frog in it, because a frog is not a dog. But if I declare the a similar array
val arr : Array[Animal] = Array.ofDim[Animal](5)
Then of course both frogs and dogs can go in it, because at the level of generality of Animal
, both Frogs and Dogs do have the same type.
In Scala Any
is a base type from which all other types derive. So, at a very high level of generality, 5
, "hello"
, and 1.5
, all have the same type Any
, just as at a high level of generality Frog
and Dog
have the same type Animal
. So there's no problem putting 5
, "hello"
, and 1.5
into an Array[Any]
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With