Оператор "+" для Java-классов
У меня есть класс вроде этого:
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;
Ответы
Ответ 1
Нет, вы не можете. +
перегружается только для чисел, символов и 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 no string operand
Ответ 2
Нет, потому что Джеймс Гослинг сказал так:
Я забыл перегрузку оператора как довольно личный выбор, потому что я видел, как слишком много людей злоупотребляют им в С++.
Источник: http://www.gotw.ca/publications/c_family_interview.htm
Ссылка: Почему Java не предлагает перегрузку оператора?
Ответ 3
Нет. Java не поддерживает перегрузку оператора (для пользовательских классов).
Ответ 4
В java нет перегрузки операторов.
Единственное, что поддерживается для объектов, - это конкатенации строк через "+". Если у вас есть последовательности объектов, соединенных через "+", и по крайней мере один из них является строкой, тогда результат будет привязан к созданию строки. Пример:
Integer a = 5;
Object b = new Object();
String str = "Test" + a + b;
будет привязан к
String str = new StringBuilder("Test").append(a).append(b).toString();
Ответ 5
Нет, это невозможно, поскольку Java не поддерживает перегрузку оператора.