Я изо всех сил пытаюсь использовать элемент в качестве параметра в своем коде.
Для моих вызовов Hibernate API мне нужно указать, какой класс мне соответствует результат запроса. Вместо того, чтобы делать много маленьких методов, которые довольно похожи, я хочу высушить это.
У меня есть этот код здесь:
private void selectAllFrom(MyClass myclass) {
CriteriaQuery<MyClass> query = builder.createQuery(Myclass.class);
}
Вместо этого я хочу иметь MyClass-Class в качестве общего параметра и использовать такой метод:
private void selectAllFrom(Class<T> any) {
CriteriaQuery<Class<T>> query = builder.createQuery(Class<T>.class)
}
// usage:
// selectAllFrom(MyClass.class)
Как это можно сделать на Java?
CriteriaQuery<any> query = builder.createQuery(any.class) -> CriteriaQuery<T> query = builder.createQuery(any)У вас фундаментальное непонимание того, как работает Class<T>. Класс Class<T> будет Class<Class<T>>.
Извините за этот глупый вопрос. В любом случае, спасибо за огромную помощь, без вас, ребята, я бы не смог продолжить свою работу :)




Это должно работать. Обратите внимание, что вы должны использовать T при ссылке на тип и any при ссылке на значение Class<?>, требуемое createQuery и другими методами.
private <T> void selectAllFrom(Class<T> any) {
CriteriaQuery<T> query = builder.createQuery(any)
}
Спасибо, но я не могу использовать это так: selectAllFrom(MyClass.class)
Почему нет? Пожалуйста, добавьте трассировку стека к вопросу
Поскольку IntelliJ помечен красным и почему он возвращает T, мне не нужен возвращаемый тип
@Miger Здесь нет возвращаемого типа. Это параметр универсального типа.
хорошо, теперь это работает. Я пропустил <T>, потому что сначала подумал, что это возвращаемый тип, но потом увидел, что он все еще недействителен, не видел его раньше, спасибо!
Я думаю, что замена
CriteriaQuery<any>наCriteriaQuery<T>должна помочь