Implementação de collection

Olá, estou com uma dúvida.

tenho uma collection de objetos que possuem o metodo getValue();

Gostaria de fazer uma classe MyCollection que quando eu executar um método ele fizesse a soma dos valores, exemplo :

MyCollection myCollection = facade.getValues(); long total = myCollection.soma();

Minha dúvida está em como fazer a implementação para que o método soma use o metodo getValue dos objetos ?

Se esses tais objetos que têm o método “getValue()” implementarem uma interface que tem o método getValue:

interface IValue {
    double getValue();
}

aí é bem mais fácil, e você nem precisa ter uma classe MyCollection. Simplesmente crie um método que pega a tal collection e soma os valores dos objetos que implementam IValue.

public static double soma (Collection coll) {

    double ret = 0.0;
    for (Iterator it = coll.iterator(); it.hasNext(); ) {
        Object obj = it.next();
        if (obj instanceof IValue) {
            ret += ((IValue)obj).getValue();
        }
    }
    return ret;
}

Se você não pode alterar as classes dos objetos para que implementem a tal interface, então fica muito mais lento, porque você precisa checar objeto por objeto, usando reflection, se ele tem um método chamado getValue, e se ela não tem parâmetros e retorna double. Isso é lento.

Eu acredito que a logica a ser utilizada é essa mesma, porem eu utilizaria os recursos do Java 5 a nosso favor, vejam o código abaixo como é mais limpo e faz praticamente a mesma coisa…

public static double soma (Collection<? extends IValue > coll) { double ret = 0.0; for(IValue valor : coll) { ret += valor; } return ret; }

Lendo em miudos, o metodo some recebe um List de qualquer Objeto que passe no teste instanceOf (É UM) de IValue.
Em seguida utilizamos o for aprimorado para trabalhar com a Collection.

MAs vale lembrar de que isso só funciona se estiver utilizando a versão 5 do Java!!!
Um grande abraço!!