Как передать MyClass.class в качестве параметра в моем методе?

Я изо всех сил пытаюсь использовать элемент в качестве параметра в своем коде.

Для моих вызовов 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> на CriteriaQuery<T> должна помочь

Ayrton 19.02.2019 13:10
CriteriaQuery<any> query = builder.createQuery(any.class) -> CriteriaQuery<T> query = builder.createQuery(any)
Michael 19.02.2019 13:12

У вас фундаментальное непонимание того, как работает Class<T>. Класс Class<T> будет Class<Class<T>>.

Michael 19.02.2019 13:20

Извините за этот глупый вопрос. В любом случае, спасибо за огромную помощь, без вас, ребята, я бы не смог продолжить свою работу :)

Miger 19.02.2019 14:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно работать. Обратите внимание, что вы должны использовать T при ссылке на тип и any при ссылке на значение Class<?>, требуемое createQuery и другими методами.

private <T> void selectAllFrom(Class<T> any) {
    CriteriaQuery<T> query = builder.createQuery(any)
}

Спасибо, но я не могу использовать это так: selectAllFrom(MyClass.class)

Miger 19.02.2019 13:18

Почему нет? Пожалуйста, добавьте трассировку стека к вопросу

Ayrton 19.02.2019 13:18

Поскольку IntelliJ помечен красным и почему он возвращает T, мне не нужен возвращаемый тип

Miger 19.02.2019 13:19

@Miger Здесь нет возвращаемого типа. Это параметр универсального типа.

Michael 19.02.2019 13:22

хорошо, теперь это работает. Я пропустил <T>, потому что сначала подумал, что это возвращаемый тип, но потом увидел, что он все еще недействителен, не видел его раньше, спасибо!

Miger 19.02.2019 13:22

Другие вопросы по теме