@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(); } }