@Override
 public <T extends M2> Collection<T> getMany(M1 one, Class<T> manySide) {
   if (manySide == M2.class) {
     return (Collection<T>) one.getBs();
   } else if (manySide == M3.class) {
     return (Collection<T>) one.getCs();
   } else if (manySide == M4.class) {
     return (Collection<T>) one.getDs();
   } else {
     throw new AssertionError();
   }
 }