Nano Hash - криптовалюты, майнинг, программирование

как получить класс из имени класса

У меня есть строка Person, которая является именем класса Person. Могу ли я получить класс Person из этой строки? Мне нужен класс для вызова статических методов if.

Другими словами: есть ли обратное Class.getName()?

Если это вообще не работает, дайте мне знать. Это тоже ответ.

18.11.2014

  • Ответы ниже дали вам то, что вы искали? 19.11.2014

Ответы:


1

Class.forName будет работать для полного имени, включая пакет.

Если все, что у вас есть, это голое имя без пакета, то общего способа нет, но в конкретном случае класса предметной области Grails (или другого артефакта Grails) вы можете поищите через grailsApplication.

18.11.2014
  • Я работаю в среде agrails, но как я могу получить приложение grails? 19.11.2014
  • Теперь я заставил его работать так же универсально, как я хочу, получив grailsApplication с помощью: 'def grailsApplication = new Historie().domainClass.grailsApplication' 19.11.2014
  • Контроллеры @ user3647093 имеют его автоматически, службы и домены могут использовать автопроводку (уровень класса def grailsApplication), в любом другом месте вы можете получить его из grails.util.Holders 19.11.2014

  • 2
    class Person {
        static someMethod() {
            println 'Yep'
        }
    }
    

    Если вы знаете имя метода, который хотите вызвать, вы можете сделать что-то вроде этого...

    def className = 'Person'
    def clz = Class.forName(className)
    clz.someMethod()
    

    Если имя метода динамическое, вы можете сделать что-то вроде этого...

    def className = 'Person'
    def methodName = 'someMethod'
    def clz = Class.forName(className)
    clz."$methodName"()
    
    18.11.2014
  • Вызов метода непосредственно для объекта clz требует, чтобы этот метод был статическим, поскольку вы фактически вызываете Person.someMethod(). 01.12.2020
  • "Calling the method directly on the clz object requires that method to be static as you're effectively calling Person.someMethod()" @beechovsky Верно. JVM не позволяет вам вызывать методы экземпляра для ссылки на класс, потому что это не имеет смысла. Исходный вопрос включает "I need the class to call static methods of if.", поэтому я продемонстрировал, как это сделать. 01.12.2020
  • Ах - ага! Я вижу сейчас. 02.12.2020

  • 3

    Да, есть способ: Class.forName(<String>) который должен делать то, что Вам нужно. Имейте в виду тот факт, что вам нужно передать полное имя класса (с пакетом). См. документы< /а>.

    18.11.2014

    4

    Вы можете получить класс, используя Class.forName() . Ниже код может помочь вам

    String type ="com.yourPackage.Person";
    Class<Person> m = (Class<Person>) Class.forName(type);
    
    18.11.2014
  • Почему вы предлагаете ему вызывать newInstance? 18.11.2014
  • Кроме того, приведение (Object) к возвращаемому значению из newInstance() не имеет смысла. Ваша ссылка destClass объявлена ​​с помощью Object. Ссылке Object можно присвоить что угодно. Актерский состав ничего не делает в этом случае. Тот факт, что вы назвали переменную destClass, заставляет меня задуматься, думали ли вы, что newInstance() возвращает объект java.lang.Class, а не экземпляр этого класса. 18.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..