@SuppressWarnings("unchecked") private <X, Z> List<X> select(Z x, boolean distinct) { Class<?> clazz = x.getClass(); if (ClassUtils.isSimpleType(clazz)) { return selectSimple((X) x, distinct); } clazz = clazz.getSuperclass(); return select((Class<X>) clazz, (X) x, distinct); }