Reihungserzeugung und -varianz in Java
Kovarianz
- Number ist Untertyp von Object ⇒
- Number[] ist Untertyp von Object[]
Kontravarianz
- Number ist Untertyp von Object ⇒
- Object[] ist Untertyp von Number[]
Invarianz
- Number ist Untertyp von Object
Welche der drei Festlegungen wäre sinnvoll?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object[] a = new java.lang.Number[ 1 ];
a[ 0 ]= java.lang.Integer.valueOf( 0 );
a[ 0 ]= "alpha"; }}transcript
Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
at Main.main(Main.java:5)
Die folgende universelle Ausgabemethode für Reihungen wäre ohne Kovarianz nicht möglich gewesen.
- Beispiel
public static void print( final java.lang.Object[] array )
{ java.lang.System.out.println( java.util.Arrays.toString( array )); }