Generics?



  • Hallo,
    ich habe folgendes Problem:

    private <T> T ausgabe(T[][] arg){
    for(..)
     for(..)
      ...gebe alle Elemente wieder...
    }
    
    public static void main(String[] args{
    
    int[][] abc = ...;
    
    float [][] xyz = ...;
    
    new blabla().ausgabe(abc); //das funktionert nicht, wie kann es funktionieren?
    new blabla().ausgabe(xyz); //das funktionert nicht, wie kann es funktionieren?
    
    }
    

    Wie könnte es funktionieren? DANKE.



  • hi,

    T muss vom Typ Object sein, also kannst du da kein int oder float-Array als Parameter übergeben. Musst die halt dann nen Integer-Array und Float-Array basteln (Warpperklassen, siehe java.lang). Mittels autoboxing lässt sich das au ganz prima initialisieren, das Array.



  • int[] und float[] sind auch Objects...

    ... das kann nur nicht funktinoieren, weil es keine generischen arrays gibt. im übrigens gibs für array ausgabe auch schon methoden in java.util.Arrays



  • Danke LeGaN, warum bin ich nicht früher darauf gekommen.

    @Der gewünschte Benutzerna: Was meinst du?



  • wie was ich meine? steht doch da. dein code funktioniert gleich doppelt nicht.
    also erst mal hat legan unrecht, weil int[] und float[]sehr wohl Objects sind aber zu deinem code:

    int[][] abc
    => ausgabe(abc)

    beim aufruf wird für T der typ int[][] eingesetzt, also wird als parameter ein int[][][][] erwartet du gibst ihm nur ein int[][] also kann das nicht kompilieren.
    und zweitens geht es nicht, selbst wenn problem 1 nicht bestünde (mit ausgabe(T array) weil es keine generischen arrays gibt



  • Hi,

    klar ist int[][] ein Object, aber T soll ein Object sein und ein int ist nun mal kein Object, nur int[] bzw. int[][]...



  • private <T> T ausgabe(T[][] arg){
    for(..)
     for(..)
      ...gebe alle Elemente wieder...
    }
    
    public static void main(String[] args{
    Integer[][] abc = ...;
    
    Float[][] xyz = ...;
    
    new blabla().ausgabe(abc); 
    new blabla().ausgabe(xyz); 
    
    }
    

    Funktioniert!


Log in to reply