Maison > Java > javaDidacticiel > Plusieurs classes de niveau supérieur peuvent-elles exister dans un seul fichier Java et quelles en sont les implications ?

Plusieurs classes de niveau supérieur peuvent-elles exister dans un seul fichier Java et quelles en sont les implications ?

Mary-Kate Olsen
Libérer: 2024-11-27 16:17:14
original
680 Les gens l'ont consulté

Can Multiple Top-Level Classes Exist in a Single Java File, and What Are the Implications?

Java : plusieurs déclarations de classe dans un seul fichier

Bien qu'il soit possible de définir plusieurs classes de niveau supérieur dans un seul fichier Java, en respectant certaines conventions sont essentielles. L'une de ces conventions est qu'une seule classe peut être déclarée comme publique, comme spécifié par la spécification du langage Java (JLS).

Terminologies

Il n'y a pas de terme spécifique pour décrire cette technique de définition de plusieurs classes dans un seul fichier. Contrairement aux classes internes, imbriquées ou anonymes, ces classes de niveau supérieur ont une portée et une relation différentes avec le fichier qui les contient.

Restriction d'unité de compilation

Le JLS déclare que le système peut imposer la restriction selon laquelle ces classes secondaires non publiques ne peuvent pas être « référencées par code dans d'autres unités de compilation du package ». Cela signifie qu'ils ne peuvent pas être traités comme des packages privés.

Implémentation

En pratique, les compilateurs Java comme javac n'appliquent pas strictement cette restriction. Cependant, ils ont une limitation qui rend hautement indésirable la référence à une classe de niveau supérieur à partir d'un autre fichier, à moins qu'elle ne partage le même nom que le fichier dans lequel elle réside.

Par exemple, considérons deux Java fichiers :

  • Foo.java :
public class Foo {
    // ...
}
Copier après la connexion
  • Bar.java :
public class Bar {
    // ...
    Baz baz; // Compilation error if compiled separately
}

class Baz {
    // ...
}
Copier après la connexion

Si Foo.java fait référence à Baz mais pas à Bar, tentative de compilation Foo.java entraînera indépendamment une erreur de compilation.

Raisonnement

Cette limitation existe car javac ne peut pas déterminer automatiquement quel fichier source rechercher lorsqu'une classe est référencée à partir d'une autre déposer. Pour résoudre ce problème, le compilateur exige que toute classe de niveau supérieur référencée par une classe externe porte le même nom que le fichier contenant ou soit explicitement déclarée dans une classe du même nom (par exemple, dans l'exemple ci-dessus, si Foo .java contenait également une classe Bar).

Conséquences et bonnes pratiques

Bien qu'il soit techniquement possible d'utiliser plusieurs classes de niveau supérieur dans un seul fichier, cela est généralement considéré comme une mauvaise pratique en raison des limitations du compilateur décrites ci-dessus. Pour maintenir un processus de construction fiable, il est recommandé de respecter la convention consistant à placer une classe de niveau supérieur par fichier et à déclarer clairement sa visibilité (publique ou privée du package).

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal