Surcharge d’opérateur en Java

Pouvez-vous me dire s’il est possible de surcharger les opérateurs en Java? S’il est utilisé n’importe où en Java, pourriez-vous m’en parler.

Non, Java ne prend pas en charge la surcharge des opérateurs définie par l’utilisateur. Le seul aspect de Java qui se rapproche de la surcharge d’opérateurs “personnalisée” est le traitement de + pour les chaînes, ce qui entraîne soit la concaténation des constantes au moment de la compilation, soit la concaténation au moyen de SsortingngBuilder / SsortingngBuffer. Vous ne pouvez pas définir vos propres opérateurs qui agissent de la même manière.

Pour un langage Java (et basé sur JVM) qui prend en charge la surcharge des opérateurs, vous pouvez consulter Groovy . Vous pouvez également trouver de la chance avec une solution de plug-in de compilation Java .

La surcharge d’opérateur est utilisée en Java pour la concaténation du type Ssortingng:

 Ssortingng concat = "one" + "two"; 

Cependant, vous ne pouvez pas définir vos propres surcharges d’opérateur.

En plus de toutes les personnes soulignant que + est surchargé pour les chaînes, - est également surchargé pour les opérations à virgule flottante et les opérations sur les nombres entiers, tout comme * et / .

[edit] % est également surchargé en virgule flottante, ce qui peut surprendre ceux qui ont un arrière-plan C ou C ++.

Java ne permet pas la surcharge de l’opérateur. L’approche privilégiée consiste à 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 bits Java non cités dans le langage C: Fonctionnalités supprimées de C et C ++

Vous ne pouvez pas le faire vous-même car Java ne permet pas la surcharge de l’opérateur.

À une exception près, cependant. + et + = sont surchargés pour les objects Ssortingng.

On peut essayer la surcharge d’opérateur Java . Il a ses propres limites, mais cela vaut la peine d’essayer si vous voulez vraiment utiliser la surcharge de l’opérateur.

Utilisez simplement Xtend avec votre code Java. Il prend en charge la surcharge d’opérateur:

  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 } } 

Sur le site officiel, il y a une liste des méthodes à mettre en œuvre pour chaque opérateur!

Comme beaucoup d’autres ont répondu: Java ne prend pas en charge la surcharge des opérateurs définie par l’utilisateur.

Peut-être que c’est hors sujet, mais je veux commenter certaines choses que je lis dans certaines réponses.

A propos de la lisibilité
Comparer:

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

Regarde encore!
Lequel est le plus lisible?

Un langage de programmation permettant la création de types définis par l’utilisateur devrait leur permettre d’agir de la même manière que les types intégrés (ou types primitifs).

Ainsi, Java rompt un principe fondamental de la programmation générique:
Nous devrions pouvoir échanger des objects de types intégrés avec des objects de types définis par l’utilisateur.
(Vous vous demandez peut-être: “Est-ce qu’il a dit” des objects intégrés? “. Oui, voir ici .)

A propos de la concaténation de chaînes:

Les mathématiciens utilisent le symnol + pour les opérations commutatives sur les ensembles.
Nous pouvons donc être sûrs que a + b = b + a.
La concaténation de chaînes (dans la plupart des langages de programmation) ne respecte pas cette notation mathématique commune.

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

ou en Java:

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

Supplémentaire:
Remarquez comment en Java, égalité et identité sont confondues. Le symbole == (égalité) signifie:
une. Égalité pour les types primitifs
b. Vérification de l’identité pour les types définis par l’utilisateur, nous sums donc obligés d’utiliser la fonction equals () pour l’égalité.
Mais … Qu’est-ce que cela a à voir avec la surcharge de l’opérateur?
Si le langage permet à l’opérateur de surcharger l’utilisateur, il pourrait donner la signification appropriée à l’opérateur d’égalité.

Ou, vous pouvez créer Java Groovy et simplement surcharger ces fonctions pour obtenir ce que vous voulez

 //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 ne veut pas être / utiliser groovy? :RÉ

Non, vous ne pouvez pas utiliser les fichiers JAR groovy compilés de la même manière en Java. C'est toujours une erreur de compilation pour Java.