tipo - que son operadores java




Sobrecarga del operador en Java (6)

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 ++.

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


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.


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 .


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.





operator-overloading