2017-02-21 3 views
0

Ich habe eine Java-KlasseJava Arraylist addAll mit generischem Typ

public class PointCloud<T extends Point> 
{ 
    protected ArrayList<T > points = null; 

    public ArrayList<T> getPoints() 
    { 
     return points; 
    } 

    public void addPoints(ArrayList<T> arrayList) 
    { 
     this.points.addAll(arrayList); 
    } 

    public static PointCloud<? extends Point> combine(ArrayList<PointCloud<? extends Point>> pcList) 
    { 
     PointCloud<? extends Point> combinated_pc = new PointCloud<>(); 

     for(PointCloud<? extends Point> pc: pcList) 
     { 
      combinated_pc.addPoints(pc.getPoints()); 
     } 

     return combinated_pc; 
    } 
} 

Mein Java-Fehler ist:

Verfahren addPoints(ArrayList < capture#8-of ? extends Point>) im Typ PointCloud<capture#8-of ? extends Point> ist nicht anwendbar für die Argumente (ArrayList < capture#9-of ? extends Point>)

Antwort

0

Hier müssen Sie den richtigen generischen Typ angeben Bestellen Sie die addPoints Methode.

Ihre ändern kombinieren mit folgenden ..

public static <P extends Point> PointCloud<P> combine(ArrayList<PointCloud<P>> pcList) { 
    PointCloud<P> combinated_pc = new PointCloud<>(); 
    for(PointCloud<P> pc: pcList) { 
     combinated_pc.addPoints(pc.getPoints()); 
    } 
    return combinated_pc; 
} 

Wenn Sie in die Kombination verschiedener Art von Objekten interessiert sind, können Sie die addPoints Methode ändern müssen.

+0

Danke für Ihre Antwort, das Problem hier ist, dass die Methode statisch ist, daher ist T nicht möglich. – Morkhitu

+0

@Morkhitu eigentlich bekommst du es nicht. Der generische Typ T wird angewendet, weil er statisch ist. Schauen Sie genau hin. T ist kein Rückgabetyp. Der Rückgabetyp ist 'PointCloud '. Sie müssen lernen, wie Sie Generika für statische Methoden verwenden. –

+0

@Morkhitu Ich habe meine Antwort bearbeitet, um Ihr Missverständnis mit T in der Klasse Definition zu lösen. –

Verwandte Themen