Скажем, я хочу вызвать функцию в своем коде, и я хочу ввести целое число в одном случае, а в другом - строку / логическое значение / символ ... Я знаю, что для этого используется var, но он не работает в моем код. ...

0
Rocky cohn 28 Дек 2020 в 17:02

1 ответ

Лучший ответ

Я знаю, что для этого используется var, но в моем коде он не работает.

Нет это не так.

Java строго и просто типизирован. У вещей есть тип. Типа динамический / утиный нет. var не то. var - это просто синтаксический сахар.

На языке ducktyping / динамическом языке вы могли бы написать:

var x;
x = 5;
x = "Hello";

В java этого нельзя сделать . var x; - ошибка компилятора.

var x в java - это просто сокращение для: Возьмите тип объекта, который вы назначаете x в этой самой строке. Предположим, я имел в виду, что напишите этот тип. Другими словами, var разрешено только при встроенной инициализации:

var x = "Hello"; // legal; and 100% the same as writing String x = "Hello"
x = 5; // compiler error. x is of type String, and 5 isn't a string.

что мне нужно изменить / добавить, чтобы он работал и мог получать разные типы данных?

Какой общий тип у String, boolean, char и int?

Object - лучший доступный ответ, и он не самый лучший. Итак, что вам нужно сделать:

public static void add(Object num) {
    if (num instanceof Number) { .... }
    else if (num instanceof String) { .... }
    else if (num instanceof Boolean) { .... }
    else throw new IllegalArgumentException("Only numbers, strings, and booleans allowed");
}

Но это крайне не java. Похоже, вы хотите разработать слабо типизированную систему, в которой "5" и 5 обрабатываются одинаково, а true и 1 обрабатываются одинаково. Я предлагаю тебе этого не делать.

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

public static void add(String num) { ... }
public static void add(int num) { ... }
3
rzwitserloot 28 Дек 2020 в 14:13