2012-04-23 12 views

Respuesta

7

Java no permite esto.

Sin embargo, si desea lograr este tipo de sintaxis mientras puede ejecutar su código en una JVM (y con otro código Java), puede mirar Groovy, que tiene operator overloading (y con la cual también podría usar DSL para sintaxis corta que tendría efectos similares al uso de operadores personalizados).

Tenga en cuenta que la definición de operadores personalizados (no solo la sobrecarga) es un gran problema en cualquier idioma, ya que tendría que ser capaz de modificar el lexer y la gramática de alguna manera.

+0

Dicho esto, Java no tiene una sobrecarga del operador fue una decisión muy deliberada; puede que lo mejor sea evitar tales cosas. –

+1

@LouisWasserman: como estaba diciendo en otro comentario, entiendo la decisión, pero eso no hace que Java sea muy adecuado para la programación matemática, lamentablemente. Con matrices, 'a.multiply (b.multiply (c.add (d)). Add (e))' no es genial ... NumPy hace un buen uso de la sobrecarga del operador en Python. – Bruno

11

No, Java no es extensible de esta manera. No puede agregar operadores y no puede sobrecargar aún más operadores incorporados como +, incluso las clases de biblioteca estándar como BigInteger tienen que usar métodos como add() en lugar de operadores como +.

Scala (otro idioma JVM estática) evita esto mediante el uso de las llamadas de método en lugar de operadores internos, y permitiendo que todos los caracteres en los nombres de método, por lo que puede definir nuevos métodos que parecen ser los operadores, es decir

a + 1 

es el azúcar sintáctica para:

a.+(1) 
0

no, no se puede sobrecargar símbolos especiales para los operadores en Java.

+1

No pido sobrecarga. Estoy pidiendo crear un nuevo símbolo. – AedonEtLIRA

+0

en su pregunta, utilizó los términos "nuevo" y "sobrecarga", por lo que es un poco confuso. –

0

Como han dicho todos los demás, no se pueden agregar nuevos operadores en Java. Sin embargo, otros lenguajes de JVM compatibles con Java, como Groovy, le permitirán definir nuevos operadores a partir de tokens de operador existentes.

0

Nº Lee este artículo para obtener un argumento de por qué no deben ser: http://java.dzone.com/articles/why-java-doesnt-need-operator

Se puede usar un idioma diferente, como Scala, para lograr esto en la plataforma Java. - https://stackoverflow.com/a/1991348/1342121

+2

Ese artículo fue visiblemente escrito por alguien que no ha hecho ningún código numérico en Java. Ser capaz de multiplicar matrices con la sobrecarga del operador con NumPy en Python (por ejemplo) es muy útil para la legibilidad en comparación con tener que llamar a los me gusta de ['RealMatrix.multiply (RealMatrix)'] (http://commons.apache.org/ math/apidocs/org/apache/commons/math3/linear/AbstractRealMatrix.html # multiply% 28org.apache.commons.math3.linear.RealMatrix% 29) en todas partes. – Bruno

+0

de acuerdo ... No he hecho mucho de eso, y el lenguaje Java no parece ser la mejor opción para eso. La plataforma Java es genial para eso – ianpojman

Cuestiones relacionadas