tipo son relacionales que prioridad operadores operador jerarquia concepto java operator-overloading

son - Sobrecarga del operador en Java



prioridad de operadores en java (9)

¿Puede decirme si es posible sobrecargar a los operadores en Java? Si se usa en Java, ¿podría decirme al respecto?


Además de todas las personas que señalan que + está sobrecargado para cadenas, - también está sobrecargado tanto para operaciones en coma flotante como en enteros, como son * y / .

[edit] % también está sobrecargado para coma flotante, lo que puede ser un poco sorprendente para aquellos con un fondo C o C ++.


Como muchos otros han respondido: Java no admite la sobrecarga del operador definida por el usuario.

Tal vez esto no sea relevante, pero quiero comentar algunas cosas que leí en algunas respuestas.

Acerca de la legibilidad
Comparar:

  1. c = a + b
  2. c = a.add (b)

¡Mirar de nuevo!
¿Cuál es más legible?

Un lenguaje de programación que permite la creación de tipos definidos por el usuario, debería permitirles actuar de la misma manera que los tipos incorporados (o tipos primitivos).

Entonces Java rompe un principio fundamental de la Programación Genérica:
Deberíamos poder intercambiar objetos de tipos incorporados con objetos de tipos definidos por el usuario.
(Usted se estará preguntando: "¿Dijo ''objetos de built-in''?". Sí, mira aquí ).

Acerca de la concatenación de cadenas:

Los matemáticos usan el symnol + para las operaciones conmutativas en los conjuntos.
Entonces podemos estar seguros de que a + b = b + a.
La concatenación de cadenas (en la mayoría de los lenguajes de programación) no respeta esta notación matemática común.

a := "hello"; b := "world"; c := (a + b = b + a);

o en Java:

String a = "hello"; String b = "world"; boolean c = (a + b).equals(b + a);

Extra:
Observe cómo en Java la igualdad y la identidad se confunden. El símbolo == (igualdad) significa:
a. Igualdad para tipos primitivos
segundo. Verificación de identidad para los tipos definidos por el usuario, por lo tanto, estamos obligados a usar la función equals () para la igualdad.
Pero ... ¿Qué tiene esto que ver con la sobrecarga del operador?
Si el lenguaje permite la sobrecarga del operador, el usuario podría darle el significado adecuado al operador de igualdad.


Java no permite la sobrecarga del operador. El enfoque preferido es definir un método en su clase para realizar la acción: a.add(b) lugar de a + b . Puede ver un resumen de los otros bits que Java dejó fuera de C como los idiomas aquí: Características eliminadas de C y C ++


La sobrecarga del operador se usa en Java para la concatenación del tipo de Cadena:

String concat = "one" + "two";

Sin embargo, no puede definir sus propias sobrecargas de operador.


No, Java no admite la sobrecarga del operador definida por el usuario. El único aspecto de Java que se acerca a la sobrecarga del operador "personalizado" es el manejo de + para cadenas, que da como resultado la concatenación de constantes en tiempo de compilación o la concatenación en tiempo de ejecución utilizando StringBuilder / StringBuffer. No puedes definir tus propios operadores que actúen de la misma manera.

Para un lenguaje similar a Java (y basado en JVM) que admite la sobrecarga del operador, puede mirar Groovy . Alternativamente, puede encontrar suerte con una solución de complemento de compilación de Java .


O bien, puede hacer Java Groovy y simplemente sobrecargar estas funciones para lograr lo que quiere

//plus() => for the + operator //multiply() => for the * operator //leftShift() = for the << operator // ... and so on ... class Fish { def leftShift(Fish fish) { print "You just << (left shifted) some fish " } } def fish = new Fish() def fish2 = new Fish() fish << fish2

¿Quién no quiere ser / usar groovy? :RE

No, no puedes usar los JAR groovy compilados en Java de la misma manera. Todavía es un error de compilación para Java.


Simplemente use Xtend junto con su código Java. Es compatible con la sobrecarga del operador:

package com.example; @SuppressWarnings("all") public class Test { protected int wrapped; public Test(final int value) { this.wrapped = value; } public int operator_plus(final Test e2) { return (this.wrapped + e2.wrapped); } } package com.example class Test2 { new() { val t1 = new Test(3) val t2 = new Test(5) val t3 = t1 + t2 } }

¡En el sitio web oficial, hay una lista de los métodos para implementar para cada operador!


Uno puede probar la Sobrecarga de Operador de Java . Tiene sus propias limitaciones, pero vale la pena intentarlo si realmente quiere usar la sobrecarga del operador.


Usted no puede hacer esto usted mismo ya que Java no permite la sobrecarga del operador.

Con una excepción, sin embargo. + y + = están sobrecargados para objetos String.