Получить возвращаемое значение через рефлексию

Есть класс DimensionManager и мне надо получить возвращаемое значение (int) метода с названием getDimensionID, который возвращает id измерения OVERWORLD.

Как это можно реализовать?

Смог найти только получение значений, которые принимает метод.


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

Автор решения: Имя Фамилия

Пусть у нас есть метод int getDimensionID(Object o1, Object o2).
Тогда для получения типа его возвращаемого значения нам потребуется написать две строчки:

Method method = DimensionManager.class.getDeclaredMethod("getDimensionID", Object.class, Object.class);
System.out.println(method.getReturnType());

Для вызова метода с помощью рефлексии вам потребуется следующая строчка:

method.invoke(
/* имя объекта класса, содержащего метод, или null, если метод статический */,
/* аргументы метода */);

Если ваш класс - enum, то вы не можете создать его экземпляр, но вы можете получить доступ к одной из его констант. Если не получается напрямую, можно через рефлексию тремя способами (пусть одна из его констант называется INSTANCE):

// 1 способ
DimensionManager.class.getDeclaredField("INSTANCE").get(null);
// 2 способ
DimensionManager.class.getEnumConstants()[0]; // в квадратных скобках порядковый индекс константы
// 3 способ
Enum.valueOf(DimensionManager.class, "INSTANCE");

Дальше просто пишете:

System.out.println(DimensionManager.class.getMethod("getDimensionID").invoke(Enum.valueOf(DimensionManager.class, "INSTANCE")));

Если после этого у вас вылетают ошибки, скорее всего, вы неправильно указали путь к классу.

→ Ссылка