Maison Java javaDidacticiel Comment déterminer la méthode la plus adaptée dans le mécanisme de surcharge des fonctions Java ?

Comment déterminer la méthode la plus adaptée dans le mécanisme de surcharge des fonctions Java ?

Apr 26, 2024 am 09:06 AM
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

Java 函数重载机制中如何确定最匹配的方法?

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

  1. 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) {
        // ...
    }
}
Copier après la connexion

L'appel de method(1) correspondra à method(int a). method(1) 会匹配 method(int a)

  1. 符合变量参数(Varargs):如果有一个方法被声明为可变参数,则该方法可以与任何数量或类型(包括原始类型和对象)的参数匹配。可变参数方法必须作为最后一个方法声明。
class Example {
    public void method(Object... args) {
        // ...
    }

    public void method(int a, int b) {
        // ...
    }
}
Copier après la connexion

调用 method(1)method(1, 2, "Hello") 都会匹配 method(Object... args)

  1. 包装类型和原始类型的转换:基本类型的包装类型(例如 Integer)和相应的原始类型(例如 int)可以相互转换。如果有一个方法匹配原始类型参数,而调用使用包装类型参数,或者反之亦然,则该方法仍然可以被认为是匹配的。
class Example {
    public void method(int a) {
        // ...
    }

    public void method(Integer a) {
        // ...
    }
}
Copier après la connexion
Copier après la connexion

调用 method(1)method(new Integer(1)) 都能匹配这两个方法。

  1. 自动装箱和拆箱:当基本类型值传递给包装类型参数时,会自动装箱为包装类型对象。当包装类型对象传递给基本类型参数时,会自动拆箱为基本类型值。
class Example {
    public void method(int a) {
        // ...
    }

    public void method(Integer a) {
        // ...
    }
}
Copier après la connexion
Copier après la connexion

调用 method(1)method(Integer.valueOf(1)) 都能匹配这两个方法。

  1. 派生类类型:当调用使用派生类对象的参数时,该参数也可以匹配其基类类型的参数。
class Animal {
    public void makeSound() {
        // ...
    }
}

class Dog extends Animal {
    public void makeSound() {
        // ...
    }
}
Copier après la connexion

调用 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) {
        // ...
    }
}
Copier après la connexion

当调用 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

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.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

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.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

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.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

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.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

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.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

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.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

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.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

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

See all articles