Невозможно преобразовать объект class centaur.demo.Profile с классом java.lang.Class в класс centaur.demo.Profile

Пожалуйста, помогите мне решить эту проблему. Спасибо!

Я работаю над проектом Grails-5.2.4 с Java 1.8. Загрузчик классов не работает должным образом.

Я получаю исключение приведения класса для следующего фрагмента кода.

def index() {
    Profile profile = getClass().classLoader.loadClass("centaur.demo.Profile") as Profile
}

Ниже приведены сведения об исключении:

Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'class centaur.demo.Profile' with class 'java.lang.Class' to class 'centaur.demo.Profile'
    at org.grails.web.converters.ConverterUtil.invokeOriginalAsTypeMethod(ConverterUtil.java:147)
    at org.grails.web.converters.ConvertersExtension.asType(ConvertersExtension.groovy:56)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at centaur.demo.IndexController.index(IndexController.groovy:10)
    ... 13 common frames omitted

Ожидаемое поведение:

Строка ниже должна возвращать объект класса Profile.

getClass().classLoader.loadClass("centaur.demo.Profile")

Это отлично работает с Grails 3.3.9.

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

Ответы 2

Как следует из названия, ClassLoader#loadClass возвращает экземпляр java.lang.Class. Вы должны создать экземпляр класса, чтобы получить объект его ссылочного типа, используя new Profile(...) или вызвав Class#newInstance в результате loadClass (при условии, что ваш класс Profile имеет доступный конструктор по умолчанию)

Спасибо, Флориан, ты очень хорошо объяснил.

Naeem Ghumman 23.11.2022 18:20
Ответ принят как подходящий

эта строка:

getClass().classLoader.loadClass("centaur.demo.Profile")

должен вернуть вам объект Class.

ознакомьтесь с документацией: https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#loadClass-java.lang.String-

поэтому вы можете присвоить результат классу:

Class c = getClass().classLoader.loadClass("centaur.demo.Profile")

вы можете создать экземпляр класса:

def profile = getClass().classLoader.loadClass("centaur.demo.Profile").newInstance()

но следующий код может завершиться ошибкой:

centaur.demo.Profile profile = getClass().classLoader.loadClass("centaur.demo.Profile").newInstance()

когда загрузчик классов, используемый для объявления, отличается от возвращаемого getClass().classLoader

Привет @daggett, что, если я не хочу создавать новый экземпляр, а загружать существующую запись из БД?

Naeem Ghumman 04.12.2022 06:50

Не могу понять, как вопрос связан с загрузкой записи из БД..

daggett 04.12.2022 08:21

На самом деле, я столкнулся с проблемой, подобной этой, когда данные извлекаются из базы данных. Не могли бы вы дать мне свой адрес электронной почты/скайп и т. д., чтобы поделиться подробностями? Если ты сможешь это исправить, я заплачу тебе за это. Платное задание. Спасибо!

Naeem Ghumman 05.12.2022 09:04

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