L'extension de java ArrayList

Je voudrais étendre ArrayList pour ajouter un peu de méthodes pour une classe dont les instances seraient détenues par la prolongation de la liste de tableaux. Une illustration simplifiée exemple de code est ci-dessous.

Ce qui semble raisonnable pour moi, mais je suis très nouveau à Java et je vois d'autres questions qui découragent l'extension de ArrayList, par exemple L'extension de liste de tableaux et de Créer de nouvelles méthodes. Je ne sais pas assez de Java pour comprendre les objections.

Dans ma précédente tentative, j'ai terminer la création d'un certain nombre de méthodes dans ThingContainer qui ont été essentiellement pass-through pour liste de tableaux, de sorte que l'extension semblait plus facile.

Est-il une meilleure façon de faire ce que je suis en train de faire? Si oui, comment doit-il être mis en œuvre?

import java.util.*;

class Thing {
    public String name;
    public int amt;

    public Thing(String name, int amt) {
        this.name = name;
        this.amt = amt;
    }

    public String toString() {
        return String.format("%s: %d", name, amt);
    }

    public int getAmt() {
        return amt;
    }
}

class ThingContainer extends ArrayList<Thing> {
    public void report() {
        for(int i=0; i < size(); i++) {
            System.out.println(get(i));
        }
    }

    public int total() {
        int tot = 0;
        for(int i=0; i < size(); i++) {
            tot += ((Thing)get(i)).getAmt();
        }
        return tot;
    }

}

public class Tester {
    public static void main(String[] args) {
        ThingContainer blue = new ThingContainer();

        Thing a = new Thing("A", 2);
        Thing b = new Thing("B", 4);

        blue.add(a);
        blue.add(b);

        blue.report();
        System.out.println(blue.total());

        for (Thing tc: blue) {
            System.out.println(tc);
        }
    }
}
La réponse de Jon Skeet comprend "je ne voudrais pas prolonger ArrayList<> à moins que je devais vraiment, préférant la composition au cours de l'héritage" Ou "Comme beaucoup d'autres l'ont dit, oui, vous pouvez étendre la classe ArrayList, mais il n'est pas quelque chose que vous devrait le faire normalement; il n'est pas considéré comme une bonne pratique en Java." à partir de stackoverflow.com/questions/4779173/.... Cependant, à partir de votre et les autres réponses, je semble être mal interprété.
Personnellement, j'ai tendance à éviter de dériver les classes du JDK, car il pourrait être un changement dans la mise en œuvre que je ne contrôle pas, ou qui casse quelque chose dans mon poste que je n'étais pas au courant de--il y a parfois subtile "pièges" quand on s'appuie sur la superclasse comportement que l'on ne pense pas toujours à propos, ou pas penser si nous n'avons pas de détails de mise en œuvre.
ne serait-ce pas de problème s'applique également à l'aide de classes du JDK?
Tu veux dire simplement les utiliser sans sous-classement?
Oui. 9876543210

OriginalL'auteur foosion | 2011-11-11