Following is my code snippet:
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
var output = switch (input){
case 1 -> "one";
case 2 -> '2';
case 3 -> 3.14;
default -> 10;
};
System.out.println(output);
Now if I enter 1 as input, it prints "one", for 2 it prints '2', for 3 it prints 3.14 and for the rest it prints 10.
Does this mean datatype of output is decided at runtime according to the return type?
The type of output
is determined at compile time as something that is Serializable
, Comparable
and Constable
, because that's the closest common ancestor to all of the result.
The object assigned to the variable is determined at runtime is one of String
, Character
, Double
or Integer
.
The actual compile type is Serializable & Comparable<? extends Serializable & Comparable<?> & Constable> & Constable
(My IDE told me that!).