Java - Как вызвать функцию из класса по String

Мне надо, чтобы по названию из String переменной можно было найти из пакета класс и вызвать из него нужный метод способом актуальным для JDK 21, а актуальные варианты под JDK 21 я не нашел. Class.getDeclaredConstructor() у меня не находит IDE: не находит


Ответы (1 шт):

Автор решения: Nowhere Man

Пример в онлайн-компиляторе JDoodle с Java 21:

import java.lang.reflect.*;

public class MyClass {
    @SuppressWarnings("unchecked")
    public static void main(String args[]) throws Exception {
        System.out.println("Current JVM version: " + System.getProperty("java.version"));
        
        Class<String> clzz = (Class<String>) Class.forName("java.lang.String");
        
        Constructor<String> ctrStringChars = clzz.getDeclaredConstructor(char[].class);
        
        // создание объекта при помощи конструктора
        String reflected = ctrStringChars.newInstance(new char[]{'H', 'i'});
        System.out.println(reflected);
        
        // вызов метода для объекта
        Method repeat = clzz.getMethod("repeat", int.class);
        String repeated = ((Class<String>)repeat.getReturnType()).cast(repeat.invoke(reflected, 3));
        System.out.println(repeated);
        
        // вызов статического метода
        Method valueOf = clzz.getMethod("valueOf", int.class);
        String statResult = ((Class<String>)valueOf.getReturnType()).cast(valueOf.invoke(null, 123));
        System.out.println(statResult);
        
    }
}

Вывод:

Current JVM version: 21
Hi
HiHiHi
123

введите сюда описание изображения

→ Ссылка