Как я могу отправить класс в качестве параметра функции в Java? - PullRequest
0 голосов
/ 26 марта 2020

Я создал разные классы с его переменными, и я пытаюсь создать программу Java, которая создает таблицы в базе данных SQL. Проблема в том, что я не знаю, как отправить класс в качестве параметра функции.

Я работаю над этой функцией:

public void createTable (/*Class c ?*/) {

    ArrayList<String> fields = new ArrayList<>();

    for (Field f: c.class.getDeclaredFields()) {

         fields.add(f.getName());
    }

    Statement statement;

    statement = connection.createStatement();    //This part of the function wouldn't work. But let's focus on the question
    statement.execute("insert into " + c.getSimpleName() + "(" + String.join(", ", fields) + ") values" etc...
}

Обратите внимание, что вторая часть функции, в которую я хочу вставить данные в SQL базу данных, не будет работать, так как она не завершена. Но как я могу получить в этой функции разные классы (очевидно, с разными переменными) и сделать то же самое для всех классов? (создать список с названием его полей).

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Для любого человека, который ищет ответ на этот вопрос, это работает для меня:

publi c void createTable (Class c) {

ArrayList<String> fields = new ArrayList<>();

Object ob = c.newInstance();    

for (Field f: ob.getClass().getDeclaredFields()) {

     fields.add(f.getName());
}

// etc...

}

0 голосов
/ 26 марта 2020

Это просто рефакторинг, как показано ниже:

public void createTable (Class c) {

    ArrayList<String> fields = new ArrayList<>();

    for (Field f: c.getDeclaredFields()) {

         fields.add(f.getName());
    }

    Statement statement;

    statement = connection.createStatement();    //This part of the function wouldn't work. But let's focus on the question
    statement.execute("insert into " + c.getSimpleName() + "(" + String.join(", ", fields) + ") values" etc...
}
...