Comment optimiser les performances des classes internes anonymes Java ?
Le problème de performances des classes internes anonymes est qu'elles sont recréées à chaque fois qu'elles sont utilisées, ce qui peut être optimisé grâce aux stratégies suivantes : 1. Stocker les classes internes anonymes dans des variables locales 2. Utiliser des classes internes non statiques ; expressions lambda. Des tests pratiques montrent que l'optimisation des expressions lambda fonctionne mieux.
La classe interne anonyme Java optimise les performances
Introduction
La classe interne anonyme est une classe anonyme qui n'a pas de nom explicite. Ils sont souvent utilisés dans des méthodes pour créer des objets qui implémentent rapidement des interfaces ou des classes héritées. Bien que les classes internes anonymes soient pratiques à utiliser, elles peuvent également avoir un impact négatif sur les performances.
Problèmes de performances
Les problèmes de performances avec les classes internes anonymes proviennent principalement du fait qu'elles sont recréées à chaque fois qu'elles sont utilisées. Cela entraîne une allocation d’objets inutile et une surcharge d’initialisation.
Stratégies d'optimisation
La principale stratégie pour optimiser les performances des classes internes anonymes est d'éviter de les recréer à chaque fois qu'elles sont utilisées. Ceci peut être réalisé en :
1. Stockez les classes internes anonymes dans des variables locales
// 每次使用时新建匿名内部类 JButton button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }); // 将匿名内部类存储在局部变量中 ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }; button.addActionListener(listener);
2. Utilisez des classes internes non statiques
Les classes internes non statiques peuvent accéder aux variables d'instance et aux méthodes des classes externes. En déclarant une classe interne anonyme comme classe interne non statique, vous pouvez éviter de recréer la classe externe à chaque fois qu'elle est utilisée.
public class MyFrame { private JButton button; public MyFrame() { button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 可以访问外部类的变量和方法 System.out.println(button.getText()); } }); } }
3. Utilisation d'expressions lambda
Dans Java 8 et supérieur, vous pouvez utiliser des expressions lambda au lieu de classes internes anonymes. Les expressions Lambda sont plus concises et évitent la création répétée d'objets.
JButton button = new JButton(); button.addActionListener(e -> System.out.println(button.getText()));
Un cas pratique
Ce qui suit est un cas pratique qui démontre les performances de l'optimisation des classes internes anonymes :
public class Benchmark { public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 使用匿名内部类 for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }); } long endTime = System.currentTimeMillis(); System.out.println("使用匿名内部类:" + (endTime - startTime) + " ms"); // 将匿名内部类存储在局部变量中 startTime = System.currentTimeMillis(); ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }; for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(listener); } endTime = System.currentTimeMillis(); System.out.println("将匿名内部类存储在局部变量中:" + (endTime - startTime) + " ms"); // 使用非静态内部类 startTime = System.currentTimeMillis(); class MyActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // ... } } for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(new MyActionListener()); } endTime = System.currentTimeMillis(); System.out.println("使用非静态内部类:" + (endTime - startTime) + " ms"); // 使用 lambda 表达式 startTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(e -> { // ... }); } endTime = System.currentTimeMillis(); System.out.println("使用 lambda 表达式:" + (endTime - startTime) + " ms"); } }
Sortie :
使用匿名内部类:2256 ms 将匿名内部类存储在局部变量中:142 ms 使用非静态内部类:2232 ms 使用 lambda 表达式:56 ms
Comme le montre la sortie, les classes internes anonymes peuvent être considérablement optimisées à l'aide de lambda performances des expressions.
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)

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

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
