Оператор "+" для Java-классов - PullRequest
13 голосов
/ 04 мая 2011

У меня есть такой класс:

private static class Num {
    private int val;

    public Num(int val) {
        this.val = val;
    }
}

Можно ли добавить объекты объекта с помощью оператора "+"?

Num a = new Num(18);
Num b = new Num(26);
Num c = a + b;

Ответы [ 5 ]

14 голосов
/ 04 мая 2011

Нет, вы не можете.+ перегружен только для чисел, символов и String, и вам не разрешено определять какие-либо дополнительные перегрузки.

Существует один особый случай, когда вы можете объединить строковое представление любого объекта - если естьявляется String объектом в первых двух операндах, toString() вызывается для всех остальных объектов.

Вот иллюстрация:

int i = 0;
String s = "s";
Object o = new Object();
Foo foo = new Foo();

int r = i + i; // allowed
char c = 'c' + 'c'; // allowed
String s2 = s + s; // allowed
Object o2 = o + o; // NOT allowed
Foo foo = foo + foo; // NOT allowed
String s3 = s + o; // allowed, invokes o.toString() and uses StringBuilder
String s4 = s + o + foo; // allowed
String s5 = o + foo; // NOT allowed - there's no string operand
13 голосов
/ 04 мая 2011

Нет, потому что Джеймс Гослинг сказал так:

Я исключил перегрузку операторов как личный выбор, потому что видел, как слишком много людей злоупотребляет этим в C ++.

Источник: http://www.gotw.ca/publications/c_family_interview.htm

Ссылка: Почему Java не предлагает перегрузку операторов?

6 голосов
/ 04 мая 2011

Нет.Java не поддерживает перегрузку операторов (для пользовательских классов).

4 голосов
/ 04 мая 2011

В Java нет перегрузок операторов.Единственное, что поддерживается для объектов, это конкатенация строк через «+».Если у вас есть последовательности объектов, соединенных через «+», и хотя бы один из них является строкой, то результат будет встроен в создание строки.Пример:

Integer a = 5;
Object b = new Object();

String str = "Test" + a + b;

будет встроен в

String str = new StringBuilder("Test").append(a).append(b).toString();
3 голосов
/ 04 мая 2011

Нет, это невозможно, так как Java не поддерживает перегрузку операторов .

...