


Comment déterminer la méthode la plus adaptée dans le mécanisme de surcharge des fonctions Java ?
Les règles de correspondance de surcharge de fonctions Java sont : Correspondance exacte : le type et le numéro du paramètre correspondent exactement. Paramètres variables : la méthode des paramètres variables correspond à n'importe quel nombre ou type de paramètres. Conversion du type d'emballage et du type d'origine : les types de base et les types d'emballage peuvent être automatiquement convertis les uns aux autres. /unboxing : les valeurs de type de base et les objets de type encapsulés peuvent être automatiquement convertis en types de classe dérivés : les objets de classe dérivés peuvent correspondre aux paramètres de type de classe de base
Règles de correspondance du mécanisme de surcharge de fonctions Java
Surcharge de fonctions autorisée Créer plusieurs méthodes dans la même classe avec le même nom mais des types de paramètres différents. Lorsqu'une méthode surchargée est appelée, la JVM détermine la meilleure méthode correspondante à appeler en fonction de la liste d'arguments.
Détermination des règles pour la meilleure correspondance
- Correspondance exacte : Si la liste des paramètres d'une méthode correspond exactement au type et au nombre de paramètres d'appel, la méthode est la meilleure méthode de correspondance.
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }
L'appel de method(1)
correspondra à method(int a)
. method(1)
会匹配 method(int a)
。
- 符合变量参数(Varargs):如果有一个方法被声明为可变参数,则该方法可以与任何数量或类型(包括原始类型和对象)的参数匹配。可变参数方法必须作为最后一个方法声明。
class Example { public void method(Object... args) { // ... } public void method(int a, int b) { // ... } }
调用 method(1)
或 method(1, 2, "Hello")
都会匹配 method(Object... args)
。
- 包装类型和原始类型的转换:基本类型的包装类型(例如
Integer
)和相应的原始类型(例如int
)可以相互转换。如果有一个方法匹配原始类型参数,而调用使用包装类型参数,或者反之亦然,则该方法仍然可以被认为是匹配的。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
调用 method(1)
或 method(new Integer(1))
都能匹配这两个方法。
- 自动装箱和拆箱:当基本类型值传递给包装类型参数时,会自动装箱为包装类型对象。当包装类型对象传递给基本类型参数时,会自动拆箱为基本类型值。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
调用 method(1)
或 method(Integer.valueOf(1))
都能匹配这两个方法。
- 派生类类型:当调用使用派生类对象的参数时,该参数也可以匹配其基类类型的参数。
class Animal { public void makeSound() { // ... } } class Dog extends Animal { public void makeSound() { // ... } }
调用 makeSound(new Dog())
也会匹配 makeSound(Animal a)
方法。
实战案例
假设有一个 Shape
类,它有以下方法:
public class Shape { public void draw() { // ... } public void draw(int size) { // ... } public void draw(int size, boolean fill) { // ... } }
当调用 Shape shape = new Shape(); shape.draw(5);
时,JVM 会确定最匹配的方法为 draw(int size)
。这是因为调用中提供了 size
参数,而没有提供 fill
参数,因此 draw(int size, boolean fill)
- 🎜Conforme aux paramètres variables (Varargs) : 🎜Si une méthode est déclarée comme variadique, la méthode peut correspondre à n'importe quel nombre ou type de paramètres (y compris les types primitifs et les objets). Les méthodes variadiques doivent être déclarées comme dernière méthode. 🎜🎜rrreee🎜Appeler
method(1)
ou method(1, 2, "Hello")
correspondra à method(Object... args)
. 🎜- 🎜🎜Conversion entre les types wrapper et les types primitifs : 🎜Types wrapper de type de base (tels que
Integer
) et types primitifs correspondants (tels que int
>) peuvent être convertis les uns dans les autres. S'il existe une méthode qui correspond à un paramètre de type brut mais qui est appelée avec un paramètre de type encapsulé, ou vice versa, la méthode peut toujours être considérée comme une correspondance. 🎜🎜rrreee🎜Appelez method(1)
ou method(new Integer(1))
pour faire correspondre ces deux méthodes. 🎜- 🎜🎜Autoboxing et unboxing : 🎜Lorsqu'une valeur de type primitif est transmise à un paramètre de type wrapper, elle est automatiquement encadrée dans un objet de type wrapper. Lorsqu'un objet de type encapsulé est transmis à un paramètre de type de base, il est automatiquement déballé dans une valeur de type de base. 🎜🎜rrreee🎜Appelez
method(1)
ou method(Integer.valueOf(1))
pour faire correspondre ces deux méthodes. 🎜- 🎜🎜Type de classe dérivé : 🎜Lorsqu'un appel utilise un paramètre d'un objet de classe dérivé, le paramètre peut également correspondre au paramètre de son type de classe de base. 🎜🎜rrreee🎜Appeler
makeSound(new Dog())
correspondra également à la méthode makeSound(Animal a)
. 🎜🎜🎜Cas pratique🎜🎜🎜Supposons qu'il existe une classe Shape
, qui a les méthodes suivantes : 🎜rrreee🎜Lors de l'appel de Shape shape = new Shape(); ;, la JVM déterminera que la meilleure méthode de correspondance est <code>draw(int size)
. En effet, le paramètre size
a été fourni dans l'appel mais pas le paramètre fill
, donc draw(int size, boolean fill)
n'est pas un correspondance exacte . 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est
