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

Получение поля суперкласса с использованием подкласса с использованием отражения

По сути, мое требование состоит в том, чтобы получить объект суперкласса с помощью отражения, чтобы я мог получить имя поля и его значение.

Итак, у меня есть класс как

Class Emp {
  private firstName;
  priavte lastName;
}

Class Dept extend Emp {
  private dpFirstName;
  priavte dpLastName;
}

и сейчас использую

emp.getClass.getSuperClass

которые дают мне тип java.lang.Class класса Dept Теперь, когда я пытаюсь получить доступ к полю, используя следующий код.

Class<?> fields = emp.getClass.getSuperClass;
for (Field field : fields.getDeclaredFields()) {
  field.setAccessible(true);             
  System.out.println(field.get(emp.getClass.getSuperClass));
}

Это бросает мне исключение, поскольку

Can not set java.lang.String field com.Dept.dpFirstName to java.lang.Class

может ли кто-нибудь помочь мне, как я могу преобразовать его в объект и чтобы я мог получить доступ к поданному

02.07.2019

  • Опубликуйте свой фактический код. emp.getClass.getSuperClass; недействителен. 02.07.2019
  • Class Dept extend Emp тоже не компилируется. 02.07.2019

Ответы:


1

Предполагая, что действительная версия вашего кода выглядит так:

class Emp {
    private String firstName;
    private String lastName;
}

class Dept extends Emp {
    private String dpFirstName;
    private String dpLastName;
}

Редактировать: Забудьте о гипсе, работает без него.

Class<?> fields = emp.getClass().getSuperclass();

for (Field field : fields.getDeclaredFields()) {
  field.setAccessible(true);             
  System.out.println(field.getName() + "\t" + field.get(emp));
}
02.07.2019
  • олег чередник прав, актерский состав на самом деле не нужен. Итак, я предполагаю, что где-то в строке вы изменили свой код для работы с классом Dept вместо Emp. 02.07.2019

  • 2

    Ваша проблема в том, что вы получаете суперкласс для Emp, но не Dept.

    Emp emp = new Emp();
    Dept dept = new Dept();
    
    Class<?> cls = emp.getClass().getSuperclass(); // it is Class<Object>
    Class<?> cls = dept.getClass().getSuperclass(); // it is Class<Emp>
    

    Таким образом, вы можете использовать следующий фрагмент в качестве правильного примера:

    class Emp {
        private String firstName = "first_name";
        private String lastName = "last_name";
    }
    
    class Dept extends Emp {
        private String dpFirstName = "dp_first_name";
        private String dpLastName = "dp_last_name";
    }
    
    public static void getSuperClassFields(Dept dept) throws IllegalAccessException {
        Class<?> cls = dept.getClass().getSuperclass();
    
        for (Field field : cls.getDeclaredFields()) {
            field.setAccessible(true);
            System.out.println(field.getName() + " = " + field.get(dept));
        }
    }
    
    public static void main(String[] args) throws IllegalAccessException {
        getSuperClassFields(new Dept());
        // in console you can see
        // firstName = first_name
        // lastName = last_name
    }
    
    02.07.2019
    Новые материалы

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

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

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

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

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

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

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