Я потерян в generics (Java). Реальный сценарий предполагает JPA и CriteriaBuilder
«sКак правильно отбирать ожидаемые типизированные аргументы?
<Y extends Comparable<? super Y>> Predicate greaterThan(Expression<? extends Y> x, Y y);
но я упростил тот же случай в следующий класс:
public class GenericsTest {
public class Bean<T> {
};
public <T extends Comparable<T>> T targetMethod(Bean<T> bean, T object) {
return object;
}
@SuppressWarnings("unchecked")
public <T> T castToGeneric(Bean<T> bean, Object object) {
return (T) object;
}
@SuppressWarnings("unchecked")
public <T> void understandGenerics(Bean<T> bean, Object object) {
Bean<Comparable<T>> beanOfComparable = (Bean<Comparable<T>>) bean;
Comparable<T> comparableObject = this.castToGeneric(beanOfComparable, object);
this.targetMethod(beanOfComparable, comparableObject);
}
}
призывание targetMethod(beanOfComparable, comparableObject)
в последней строке генерирует
метод
targetMethod(Bean<T>, T)
по типуGenericsTest
не применяется к аргументам(Bean<Comparable<T>>, Comparable<T>)
, и я не понимаю, где эта проблема, так как T
в targetMethod
должен быть Comparable<T>
, то есть тип я даю его.