Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: conversion, overloading

Как бы ты реализовал метод, который умеет складывать числа разных типов (int, long, float, double) и строки (String), приводя их к числовому виду?

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

Короткий ответ

Для реализации такого метода нужно использовать перегрузку методов для разных числовых типов и преобразование строк к числам. Следует обрабатывать исключения при парсинге строк и выбирать наиболее подходящий тип для результата (например, double для сохранения точности). Можно использовать обобщённые методы и автоматическое приведение типов.

Длинный ответ

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

Стратегия реализации:

  1. Перегрузка методов для примитивных типов:

    public static int add(int a, int b) { return a + b; }
    public static long add(long a, long b) { return a + b; }
    public static double add(double a, double b) { return a + b; }
  2. Обработка строковых параметров:

    public static Number add(String a, String b) {
        try {
            double num1 = Double.parseDouble(a);
            double num2 = Double.parseDouble(b);
            return num1 + num2;
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("Invalid number format");
        }
    }
  3. Универсальный метод с автоматическим определением типа:

    public static Number add(Number a, Number b) {
        if (a instanceof Double || b instanceof Double) {
            return a.doubleValue() + b.doubleValue();
        } else if (a instanceof Float || b instanceof Float) {
            return a.floatValue() + b.floatValue();
        } else if (a instanceof Long || b instanceof Long) {
            return a.longValue() + b.longValue();
        } else {
            return a.intValue() + b.intValue();
        }
    }
  4. Обработка смешанных типов:

    • Преобразование всех типов к наиболее вместительному (int → long → float → double)

    • Сохранение точности вычислений

Пример использования:

public static Object add(Object a, Object b) {
    if (a instanceof String || b instanceof String) {
        double num1 = parseNumber(a);
        double num2 = parseNumber(b);
        return num1 + num2;
    } else if (a instanceof Number && b instanceof Number) {
        return add((Number)a, (Number)b);
    }
    throw new IllegalArgumentException("Unsupported types");
}

private static double parseNumber(Object obj) {
    if (obj instanceof Number) return ((Number)obj).doubleValue();
    if (obj instanceof String) return Double.parseDouble((String)obj);
    throw new IllegalArgumentException("Cannot convert to number");
}

Вывод: Универсальный метод сложения требует тщательной обработки типов и преобразований, с приоритетом сохранения точности вычислений.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#conversion

#overloading

Подпишись на Java Developer в телеграм