Подтвердить что ты не робот

Как получить объект класса из имени класса в Java

Я знаю имя класса, скажу "MyClass" и хочу получить объект Class, т.е. MyClass.class для будущих ссылок. Есть ли способ сделать это?

Я просмотрел веб-страницы, но большинство вещей, которые я нашел в связи с этим, касались ClassLoader, которые, как я полагаю, не подходят для моего случая. Я не хочу инициализировать класс, но получаю только объект класса для использования в будущем.

EDIT: Что касается первых ответов на это:

Я уже проверил метод forName(), но я думал, что предполагается также инициализировать класс. Теперь я могу вызвать его с полными аргументами и передать false во второй аргумент, но третий должен быть null или что?

Would

Class.forName("MyClass", false, null);

return MyClass.class?

Фактически, то, что я хочу сделать, заменяет массив идентификаторов строк, связанных с объектами Class, с массивом идентификаторов, из которых автоматически создаются объекты класса, чтобы избавиться от некоторой ручной работы:)

Спасибо за быстрые ответы и жаль, что не упоминал об этом раньше.

4b9b3361

Ответ 1

Вы можете использовать:

Class c = Class.forName("com.package.MyClass");

И позже создайте экземпляр объекта:

Object obj = c.newInstance();

EDIT: Это самый простой вариант использования. Как указано в комментариях, вам нужно будет рассмотреть аргументы конструктора и исключения, вызванные процессом инициализации. JavaDocs для newInstance содержит все подробности.

Ответ 2

Class.forName("MyClass")

Подробнее читайте JavaDoc

Ответ 3

Похоже, вы могли бы использовать Class class static forName.

Ответ 4

Также стоит отметить, что приведенные выше предложения верны, но будут работать только для конструкторов по умолчанию (без параметров). Вы также можете сделать что-то вроде:

    public Object newInstance(String className, Object...args) throws Exception {
        Class<?> clazz = Class.forName(className);
        if(args == null || args.length == 0) {
            return clazz.newInstance();
        }

        List<Class<?>> argTypes = new ArrayList<Class<?>>();
        for(Object object : args) {
            argTypes.add(object.getClass());
        }
        Constructor<?> explicitConstructor = clazz.getConstructor(argTypes.toArray(new Class[argTypes.size()]));
        return explicitConstructor.newInstance(args);
    }