192 votes

Surcharge des opérateurs en Java

Pouvez-vous me dire s'il est possible de surcharger les opérateurs en Java ? Si cela est utilisé quelque part en Java, pouvez-vous m'en parler ?

0 votes

247voto

Jon Skeet Points 692016

Non, Java ne prend pas en charge la surcharge des opérateurs définis par l'utilisateur. Le seul aspect de Java qui se rapproche d'une surcharge d'opérateur "personnalisée" est la gestion de + pour les chaînes de caractères, qui résulte soit en une concaténation de constantes au moment de la compilation, soit en une concaténation au moment de l'exécution à l'aide de StringBuilder/StringBuffer. Vous ne pouvez pas définir vos propres opérateurs qui agissent de la même manière.

Pour un langage de type Java (et basé sur la JVM) qui hace supportent la surcharge d'opérateur, vous pourriez regarder dans Kotlin o Groovy . Vous pourriez aussi avoir de la chance avec un Solution de plugin pour compilateur Java .

4 votes

Vous dites que nous ne pouvons pas créer de wrapper en java ? Comme SmallInteger comme Integer ?

4 votes

@turulbüyükk : Il existe déjà des wrappers pour tous les types primitifs existants - mais si vous vouliez créer votre propre nouveau type de wrapper, vous ne seriez pas en mesure de le faire se comporter comme les autres, car ils ont un support spécifique dans le langage.

1 votes

Merci, j'ai cherché sur Google et je n'ai rien trouvé. Je voulais savoir si je pouvais faire une variable complexe composée de deux primitives (un double et un int--->bonne précision+bonne portée)

38voto

teabot Points 7711

La surcharge des opérateurs est utilisée en Java pour la concaténation du type String :

String concat = "one" + "two";

Cependant, vous ne peut pas définir vos propres surcharges d'opérateurs.

26voto

MSalters Points 74024

En plus de toutes les personnes qui soulignent que + est surchargé pour les chaînes de caractères, - est également surchargé pour les opérations en virgule flottante et en nombre entier, tout comme le sont * y / .

[modifier] % est également surchargé pour la virgule flottante, ce qui peut être un peu surprenant pour ceux qui ont des connaissances en C ou C++.

21voto

rob Points 467

Java ne permet pas la surcharge des opérateurs. L'approche préférée est de définir une méthode sur votre classe pour effectuer l'action : a.add(b) au lieu de a + b . Vous pouvez voir un résumé des autres éléments que Java a laissé de côté par rapport aux langages de type C ici : Fonctions supprimées de C et C++

2 votes

L'important est l'objectif de conception qui consiste à rendre les fichiers sources Java indépendants du contexte. Essayer de lire des programmes C très volumineux (MLOC) et lourds en macro a une courbe d'apprentissage très longue. Il n'est pas plus difficile de se plonger dans un programme Java comparable (ou plus grand) que dans un petit programme Java. Comme l'a dit Gosling : Un langage dans lequel les programmeurs en cols bleus peuvent travailler. [Et tous ceux qui pensent que la verbosité du langage passe-partout est préjudiciable devraient se renseigner sur le chunking dans la cognition experte].

3 votes

Grâce à oracle, aucun des liens java.sun.com ne fonctionne. Pouvez-vous donner le lien mis à jour, si possible ?

17voto

Brian Agnew Points 143181

Vous ne pouvez pas le faire vous-même puisque Java ne permet pas de surcharger les opérateurs.

Con un exception, cependant. + y += sont surchargés pour les objets String.

9 votes

Il existe de nombreux autres exemples de surcharge d'opérateurs en Java. Par exemple & , | y ^ sont surchargés pour boolean et les types intégraux. Et en effet, les opérateurs arithmétiques et relationnels sont surchargés pour divers types numériques. (Bien sûr, la sémantique des surcharges est beaucoup plus proche ...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X