Как напечатать разные параметрически-полиморфные методы в Java? - PullRequest
0 голосов
/ 18 апреля 2019

Я объявил три метода, которые имеют одно и то же имя «сумма», чтобы продемонстрировать, как работает параметрический полиморфизм, но я не знаю, как вызывать каждый метод в отдельности, что мне и нужно, чтобы помочь с. Как я могу вызвать каждый метод и узнать, какой из них я вызываю?

Я пробовал простой System.out.println(sum(2,3));, который возвращает 5, но если я установил одно из чисел вне целочисленного диапазона, я получаю ошибку:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The literal 3000000000 of type int is out of range
    at codeTester.main.main(main.java:30)
/*
Author: Maxim Wilmot
Created:   18/04/2019
Polymorphism - Parametric
*/

package codeTester;

public class main {

    //integer between -2 147 483 648 and 2 147 483 647

    public static int sum(int a, int b) {
        return a + b;
    }

    //decimal between -3,4.10^38 and 3,4.10^38

    public static float sum(float a, float b) {
        return a + b; //
    }

    //decimal between -1,7.10^308 and 1,7.10^308

    public static double sum(double a, double b) {
        return a + b;
    }

     public static void main(String args[]) {
         System.out.println(sum(2,3)); //call a method, which one ?
     }
}

Я хочу иметь 3 разных выхода, по 1 для каждого метода. Это возможно ? Возможно рассчитать разные числа для каждого метода?

Спасибо за вашу помощь, Макс.

1 Ответ

0 голосов
/ 18 апреля 2019

Перегрузка метода (полиморфизм времени компиляции) работает в Java на основе сигнатур метода (то есть имени метода, типа аргументов и порядка аргументов).

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

В Java, если вы объявляете литеральное значение больше 2 147 483 647, тогда вы должны суффиксировать литерал с буквой ' l ' или ' L .

Итак, передайте ваш аргумент как 3000000000L или 3000000000l с другим аргументом int, после чего будет вызван метод аргументов с плавающей запятой (это будет сделано путем перестановки аргумента)

Upcasting работает как показано ниже для примитивных типов.

byte -> short -> int -> long -> float -> double

Для строки ниже

System.out.println(sum(3000000000L, 3));

вы получите ответ как

3.0E9

Этот вывод будет производиться методом типов аргументов с плавающей точкой.

...