
import java.util.ArrayList;
import java.util.List;

public class Main {

    public interface Foo<T> {
        T getValue();
        void setValue(T value);
    }
    
    public static class FooImpl<T> implements Foo<T> {
        
        private T value;
        
        public FooImpl(T value) {
            this.value = value;
        }
        
        @Override
        public T getValue() {
            return value;
        }
        
        @Override
        public void setValue(T value) {
            this.value = value;
        }
    }

    public static <T> void resetFoos(Iterable<Foo<T>> foos) {
        for (Foo<T> foo : foos) {
            foo.setValue(foo.getValue());
        }
    }
    
    public static void main(String[] args) {
        
        final Foo<Object> objFoo = new FooImpl<>(new Object());
        final Foo<Integer> numFoo = new FooImpl<>(new Integer(42));
        final Foo<String> strFoo = new FooImpl<>("asdf");
        
        List<Foo<?>> foos = new ArrayList<>(3);
        foos.add(objFoo);
        foos.add(numFoo);
        foos.add(strFoo);
        
        resetFoos(foos);
        
        System.out.println("done");
    }
}