Typargumente in Java
Klassen mit Typparameter
Bei einer Reihung kann der Typ der Komponenten näher bestimmt werden (beispielsweise: int[] oder double[]).
Auch bei Verwendung einer ArrayList kann dies nützlich sein.
Die ArrayList kann dafür mit einem Typargument versehen werden. Der Compiler kann dann Typfehler erkennen.
Die Bedeutung eines Typarguments einer Klasse hängt von der Klasse ab und findet sich immer in der Dokumentation der jeweiligen Klasse.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.util.List< java.lang.Integer >list
= new java.util.ArrayList< java.lang.Integer >();
list.add( 2 );
list.add( 2.3 );
list.add( "alpha" );
list.add( list );
java.lang.System.out.println( list ); }}transcript
Main.java:6: error: no suitable method found for add(double)
list.add( 2.3 );
^
method Collection.add(Integer) is not applicable
(argument mismatch; double cannot be converted to Integer)
method List.add(Integer) is not applicable
(argument mismatch; double cannot be converted to Integer)
Main.java:7: error: no suitable method found for add(String)
list.add( "alpha" );
^
method Collection.add(Integer) is not applicable
(argument mismatch; String cannot be converted to Integer)
method List.add(Integer) is not applicable
(argument mismatch; String cannot be converted to Integer)
Main.java:8: error: no suitable method found for add(List<Integer>)
list.add( list );
^
method Collection.add(Integer) is not applicable
(argument mismatch; List<Integer> cannot be converted to Integer)
method List.add(Integer) is not applicable
(argument mismatch; List<Integer> cannot be converted to Integer)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
3 errorsMain.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.util.List< java.lang.Integer >list
= new java.util.ArrayList< java.lang.Integer >();
list.add( 2 );
list.add( 3 );
list.add( -2 );
list.add( 19 );
java.lang.System.out.println( list ); }}transcript
[2, 3, -2, 19]
Allgemein können Referenztypen so deklariert werden, daß sie solche Typargumente akzeptieren. (Wie dies zu erfolgen hat, wird aber in dieser Lektion hier noch nicht behandelt.)
Da die Verwendung solcher Referenztypen ohne Typargumente zu Warnungen führen kann, wurde in der vorigen Lektion noch »SuppressWarnings« verwendet, das nun entfallen kann.
»<>« – Kurzschreibweise
An bestimmten Stellen kann »<>« verwendet werden, um den richtigen Typ (im folgenden Beispiel »java.lang.Integer«) vom Compiler aus dem Kontext ermitteln und dann einsetzen zu lassen
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.util.List< java.lang.Integer >list
= new java.util.ArrayList<>();
list.add( 2 );
list.add( 3 );
list.add( -2 );
list.add( 19 );
java.lang.System.out.println( list ); }}transcript
[2, 3, -2, 19]
Die Ziehung der Lottozahlen
Namen wie »shuffle«, »sort« und »subList« erklären das Verhalten und die Motivation besser als entsprechende Schleifen.
Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ java.util.List< java.lang.Integer >numbers = new java.util.ArrayList<>();for( int i = 1; i <= 49; ++i )numbers.add( i );
java.util.Collections.shuffle( numbers );
java.util.Collections.sort( numbers = numbers.subList( 0, 6 ));
java.lang.System.out.println( numbers ); }}- Protokoll
[9, 14, 16, 23, 28, 32]
- Protokoll
[4, 17, 22, 36, 37, 42]
- Protokoll
[5, 10, 19, 29, 37, 48]