Similar a Is it possible to create a new operator in c#?, ¿es posible crear su propio operador para Java? Inicialmente diría que no, ya que no se puede sobrecargar, pero de nuevo, String admite + y + = (implícitamente a través de StringBuilder en el momento de la ejecución, etc.).¿Es posible crear un operador personalizado en Java?
Respuesta
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.
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)
no, no se puede sobrecargar símbolos especiales para los operadores en Java.
No pido sobrecarga. Estoy pidiendo crear un nuevo símbolo. – AedonEtLIRA
en su pregunta, utilizó los términos "nuevo" y "sobrecarga", por lo que es un poco confuso. –
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.
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
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
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
- 1. ¿Es posible crear un nuevo operador en C#?
- 2. ¿Es posible crear un ASP.NET MVC personalizado fuertemente HTML Helper?
- 3. Crear un JButton personalizado en Java
- 4. ¿Es posible crear clases Java desde JavaDoc?
- 5. ¿Es posible usar Java para crear dll?
- 6. ¿Es posible crear un estado personalizado para usar en un StateListDrawable?
- 7. ¿Es posible crear un applet web JavaFX?
- 8. ¿Es posible crear un nuevo operador T-SQL usando el código CLR en SQL Server?
- 9. ¿Es posible crear imágenes programáticamente en Java, Android?
- 10. Crear un botón personalizado en Java con JButton
- 11. ¿Es posible definir un nuevo operador en Groovy?
- 12. ¿Es posible crear mi propia excepción no revisada en Java?
- 13. En Java, ¿es posible borrar un poco?
- 14. ¿Es posible definir un método de operador de extensión?
- 15. Crear un NSAlert totalmente personalizado
- 16. Crear un UIActivityIndicatorView personalizado
- 17. ¿Es posible crear un lienzo transparente
- 18. ¿Es posible crear un vector de bitsets?
- 19. ¿Es posible crear un vector de punteros?
- 20. ¿Es posible reemplazar el "operador new() global" en todas partes?
- 21. ¿Es posible crear un TH con TableRow.insertCell()?
- 22. ¿Es posible crear dinámicamente un UITextView?
- 23. ¿Cómo crear un entorno personalizado en Grails?
- 24. ¿Es posible crear un alias para un módulo en Ruby?
- 25. ¿Cuál es el operador & = para en Java
- 26. ¿Es posible DirectX en Java?
- 27. ¿Es posible crear una nueva propiedad css?
- 28. ¿Es posible tener un .gitignore personalizado? ¿Acceso de solo lectura?
- 29. C# 3.0 Propiedades automáticas: ¿es posible agregar un comportamiento personalizado?
- 30. Cómo crear un teclado personalizado
Dicho esto, Java no tiene una sobrecarga del operador fue una decisión muy deliberada; puede que lo mejor sea evitar tales cosas. –
@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