CompositeGenotype implements Genotype, Iterable<Entry<K, V>> { public Set<K> keySet() { return map.keySet(); } CompositeGenotype();  CompositeGenotype(Map<K, V> map); @Override int size(); @SuppressWarnings("unchecked") G get(Object key); void put(K key, V value); void clear(); Set<K> keySet(); Collection<V> values(); @Override Iterator<Entry<K, V>> iterator(); @Override @SuppressWarnings("unchecked") G newInstance(); @Override String toString();  }
@Test public void keySet() { CompositeGenotype<String, Genotype> composite = new CompositeGenotype<String, Genotype>(); composite.put("one", new IntegerGenotype(0, 2)); composite.put("two", new IntegerGenotype(0, 2)); Set<String> keys = new HashSet<String>(); keys.add("one"); keys.add("two"); Assert.assertEquals(keys, composite.keySet()); }