Как создать объект из Field.getType () отражения? - PullRequest
0 голосов
/ 19 марта 2019

Я создаю функцию отражения для создания нового объекта и установки данных внутри него.

Это мой код, но я не знаю, как заполнить тип объявления класса объекта:

<Class-Type> newObj = f.getType().getConstructor(new Class[]{}).newInstance();

f - это java.lang.reflect.Field, которое я получаю от class.getDeclaredFields ()

Я уже пытаюсь использовать тип объекта

Object newObj = f.getType().getConstructor(new Class[]{}).newInstance();

но после того, как я вызову данные

Method setterNewObj =newObj.getClass().getDeclaredMethod("set" + Character.toUpperCase(m.getName().charAt(0))+ m.getName().substring(1), m.getType()); setterNewObj.invoke(newObj, this.typeConvert(mapOfValue.get(nameOfColumn), m.getType()));

и я распечатываю данные результата не установлены (пусто);

Спасибо

1 Ответ

0 голосов
/ 19 марта 2019

Из того, что мы видим, ваш код не ошибается.
Возможно, вам нужно предоставить более полный пример кода или некоторую дополнительную информацию о том, что вы делаете, чтобы мы могли проверить.

У меня естьсоздал небольшой фрагмент кода (полный и работоспособный), чтобы показать вам, что он работает:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

class Buddy {  
    String name;  
    Buddy buddy;

    public Buddy() {}

    public Buddy(String n) {  
        this();
        name = n;  
    }  

    public void setBuddy(Buddy b) {
        if (this.buddy != null)
            this.buddy.buddy = null;
        this.buddy = b;
        b.buddy = this;
    }  

    public void setName(String name) {
        this.name = name;
    }

    private String getInfo() {
        return name;
    }

    public void display() {
        if (buddy != null)
            System.out.println(this.getInfo() +" & "+ buddy.getInfo());
        else
            System.out.println(this.getInfo());
    }  

    public static void main(String args[]) {  
        Buddy s1 = new Buddy("Rick");  
        s1.display();

        System.out.println("\nNeeds his buddy 'Morty' :");
        Buddy s2 = new Buddy("Morty");
        s1.setBuddy(s2);
        s1.display();
        s2.display();

        System.out.println("\nChange to new buddy 'Roller':");
        try {
            // Get the buddy field
            Field f = s1.getClass().getDeclaredField("buddy");

            // Create a new Buddy instance
            Object newObj = f.getType().getConstructor(new Class[]{}).newInstance();

            // Get the name field
            Field m = newObj.getClass().getDeclaredField("name");

            // Get the setter for the name field
            Method setterNewObj = newObj.getClass().getDeclaredMethod("set" + Character.toUpperCase(m.getName().charAt(0))+ m.getName().substring(1), m.getType());

            // Invoke the setter for the name field with a value
            setterNewObj.invoke(newObj, "Roller");

            // Get the setter for the buddy field
            Method setterS1 = s1.getClass().getDeclaredMethod("set" + Character.toUpperCase(f.getName().charAt(0))+ f.getName().substring(1), f.getType());

            // Invoke the setter for the buddy field with the new Buddy instance
            setterS1.invoke(s1, newObj);
        } catch (Exception e) {
            e.printStackTrace();
        }

        s1.display();
        s2.display();
    }
}

, который вы видите, печатает только что созданного друга, а старый еще существует:

Рик

Требуется его приятель 'Морти':
Рик и Морти
Морти и Рик

Сменить на нового приятеля 'Роллер':
Рик и Роллер
Морти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...