Преобразование строки в число на основе .getClass() [закрыто]

Вопрос или проблема

Я хотел преобразовать строку в число класса переменной, поэтому иногда мне нужно, чтобы это было int, иногда long, в зависимости от другого переменной.

значение известно как число.

Я убрал большую часть этого вопроса, но на случай, если кому-то еще нужно преобразовать строку в число неизвестного типа, вот оно.

value.getClass().getDeclaredMethod("valueOf",String.class).invoke(null,*string*)));

value.getClass().getDeclaredMethod(“valueOf”,String.class).invoke(null,string));

Ответ или решение

Чтобы преобразовать строку в число, учитывая класс переменной, я предлагаю воспользоваться рефлексией в Java. Данный подход позволит динамически определять класс на основе переменной и использовать метод valueOf для преобразования строки в число.

Вот пример того, как это можно сделать:

public static Number convertStringToNumber(String stringValue, Object sampleValue) throws Exception {
    // Получаем класс переменной, на основе которой будет определяться тип числа
    Class<?> clazz = sampleValue.getClass();

    // Находим метод valueOf класса
    Method valueOfMethod = clazz.getDeclaredMethod("valueOf", String.class);

    // Вызываем метод valueOf и передаем строку
    return (Number) valueOfMethod.invoke(null, stringValue);
}

public static void main(String[] args) {
    try {
        String numberAsString = "12345";

        // Пример использования с Integer
        Integer sampleInt = 0;
        Integer intValue = (Integer) convertStringToNumber(numberAsString, sampleInt);
        System.out.println("Converted to Integer: " + intValue);

        // Пример использования с Long
        Long sampleLong = 0L;
        Long longValue = (Long) convertStringToNumber(numberAsString, sampleLong);
        System.out.println("Converted to Long: " + longValue);

        // Аналогично для других типов, таких как Float, Double и т.д.
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Объяснение кода:

  1. Метод convertStringToNumber: Этот метод принимает строковое представление числа и образец переменной, тип которой нужно использовать для преобразования.
  2. Получение класса: С помощью getClass() получаем класс переменной sampleValue.
  3. Поиск метода valueOf: Используем getDeclaredMethod для нахождения статического метода valueOf в нужном классе.
  4. Вызов метода: С помощью рефлексивного метода invoke вызывается valueOf, передавая строку как аргумент.

Примечания:

  • Убедитесь, что строка, которую вы пытаетесь преобразовать, действительно может быть приведена к числовому значению, иначе вы получите NumberFormatException.
  • Как видно из примера, метод также можно использовать для преобразования строк в другие числовые типы, такие как Float, Double, и так далее, просто передавая соответствующий образец.

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

Оцените материал
Добавить комментарий

Капча загружается...