La surcharge d'opérateur en Java
S'il vous plaît pouvez-vous me dire si il est possible de surcharger les opérateurs en Java? Si elle est utilisée partout dans Java pourriez-vous me dire à ce sujet.
- Double Possible de Pourquoi ne pas Java offre la surcharge d'opérateur?
Vous devez vous connecter pour publier un commentaire.
Non, Java ne supporte pas définie par l'utilisateur la surcharge d'opérateur. Le seul aspect de Java qui touche de près à la "coutume" la surcharge d'opérateur est la manipulation de + pour les chaînes, qui sont soit des résultats au moment de la compilation concaténation des constantes ou des temps d'exécution de concaténation à l'aide de StringBuilder/StringBuffer. Vous ne pouvez pas définir votre propre des opérateurs qui agissent de la même manière.
Pour Java-like (et JVM) et de la langue qui ne soutien de la surcharge d'opérateur, vous pouvez regarder Groovy. Sinon, vous pouvez trouver de chance avec un Compilateur Java plugin solution.
BigInteger
en Java, puis regarder le même code à l'aide deBigInteger
en C# à l'aide des opérateurs. Je ne vois pas comment les délégués pause de la programmation orientée objet principes - vous besoin d'être beaucoup plus précis que celui de vos objections. Je ne connais pas les détails de pourquoi le Java concepteurs n'ont pas inclure les différentes fonctionnalités, mais je suspecte qu'il y a un mélange de pression sur les ressources et le désir de garder la langue de petite taille et relativement simple.m0
comme unMatrix
etv0
,v1
,v2
,v3
, etv4
commeVector
s, il suffit de comparer combien de temps cela vous prend pour correctement interpréter l'expression mathématique suivantem0.transpose().mult(v0.add(v1.mult(v2)).cross(v3)).sub(v4);
. Avec le soutien de la surcharge d'opérateur été inclus, il peut avoir été écrit quem0.transpose() * (v0 + v1 * v2).cross(v3) - v4;
.La surcharge d'opérateur est utilisé en Java pour la concaténation du type de Chaîne:
Cependant, vous ne peut pas définir vos propres surcharge de l'opérateur.
En plus de toutes les personnes en soulignant que
+
est surchargé pour les Chaînes,-
est aussi surchargé pour les deux nombres à virgule flottante et les opérations sur entiers, comme le sont*
et/
.[modifier]
%
est aussi surchargé pour la virgule flottante, ce qui peut être un peu une surprise pour ceux avec un C ou C++ arrière-plan.Java ne permet pas la surcharge d'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 dea + b
. Vous pouvez voir un résumé des autres bits de Java à gauche de C comme les langues ici: Fonctionnalités Supprimées à partir de C et de C++Vous ne pouvez pas le faire vous-même depuis Java ne permet pas la surcharge d'opérateur.
Avec un exception, toutefois. + et += sont surchargés pour les objets String.
&
,|
, et^
sont de surcharge pourboolean
et les types intégraux. Et en effet, l'arithmétique et les opérateurs relationnels sont surchargés pour les divers types numériques. (Bien sûr, les surcharges' sémantique est beaucoup plus proche ...)On peut essayer de Java La Surcharge D'Opérateur. Il a ses propres limites, mais il vaut la peine d'essayer si vous voulez vraiment utiliser la surcharge d'opérateur.
Comme beaucoup d'autres ont répondu: Java ne supporte pas définie par l'utilisateur la surcharge d'opérateur.
C'est peut-être hors-sujet, mais je voudrais commenter sur ce que j'ai lu dans certaines réponses.
Sur la lisibilité.
Comparer:
De regarder à nouveau!
Qui est plus lisible?
Un langage de programmation qui permet de créer des 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).
Donc Java casse un principe fondamental de la Programmation Générique:
Nous devrions être en mesure d'échanger des objets de types intégrés avec des objets de types définis par l'utilisateur.
(Vous vous demandez peut-être: "N'a-t-il dit d'objets intégrés dans des"?". Oui, voir ici.)
Sur la concaténation de Chaîne:
Les mathématiciens utilisent le symnol + pour commutative opérations sur les ensembles.
Alors nous pouvons être sûrs que a + b = b + a.
La concaténation de chaîne (dans la plupart des langages de programmation) de ne pas respecter cette commune de la notation mathématique.
ou en Java:
Supplémentaire:
Remarquez comment en Java, l'égalité et l'identité sont confus.
L' == (égalité) symbole signifie:
un. L'égalité pour les types primitifs
b. L'identité de vérifier les types définis par l'utilisateur, par conséquent, nous sommes obligés d'utiliser la fonction equals() pour l'égalité.
Mais... ce Que cela a à voir avec la surcharge d'opérateur?
Si le langage permet la surcharge d'opérateur, l'utilisateur peut donner le sens propre à l'opérateur d'égalité.
==
est utilisée pour l'égalité en Java, en C et C++. Cela n'a rien à voir avec la surcharge d'opérateur.Suffit d'utiliser Xtend avec votre code Java. Il prend en charge la Surcharge d'Opérateur:
Sur le site officiel, il y a une liste des méthodes à mettre en œuvre pour chaque opérateur de !
Ou, vous pouvez faire Java Groovy et juste la surcharge de ces fonctions à réaliser ce que vous voulez
Qui ne veut pas être/utiliser groovy? 😀
Non, vous ne pouvez pas utiliser la compilation groovy Pots en Java de la même façon. C'est encore une erreur de compilateur pour le langage Java.
Contrairement au C++ , Java ne prend pas en charge définis par l'utilisateur de la surcharge d'opérateur . La surcharge est fait à l'interne en java ,Nous pouvons prendre plus (+) pour ex: int a=2+4; , string="bonjour"+"world";
Ici, plus ajoute deux nombres entiers et de concaténer deux chaînes de caractères. On peut donc dire que Java prend en charge interne de surcharge d'opérateur, mais pas défini par l'utilisateur.