Disons que j'ai un code comme:
import java.util.Date;
import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
..
// I want to choose util.Date here. How ?
}
}
Dois-je être des noms de classe qualifiés complets? Puis-je me débarrasser des instructions d'importation? Un tel scénario est-il courant dans la programmation du monde réel?
Réponses:
Vous pouvez omettre les instructions d'importation et y faire référence en utilisant le chemin complet. Par exemple:
Mais je dirais que l'utilisation de deux classes avec le même nom et une fonction similaire n'est généralement pas la meilleure idée à moins que vous ne puissiez vraiment clarifier laquelle est laquelle.
la source
your.own.Date
utilisation de ctrl + shift + R. Cela le changera automatiquement partout où vous y ferez référence dans votre code, ainsi que dans le fichier (et le nom de fichier) votre / propre / Date.java. Tout autre IDE a probablement une fonctionnalité similaire.Date
est le nom parfait. Vous l'utiliserez dans la plupart de votre code. Cependant, vous devrez parfois appeler lejava.util.Date
notamment pour effectuer des conversions entre les deux.org.apache.log4j.Logger
etjava.util.logging.Logger
. Habituellement, je n'ai aucun contrôle sur un côté ou sur l'autre; Je fais l'intégration de code hérité.utilisez le nom complet au lieu d'importer la classe.
par exemple
la source
Oui, lorsque vous importez des classes avec les mêmes noms simples, vous devez y faire référence par leurs noms de classe complets. Je laisserais les instructions d'importation, car cela donne aux autres développeurs une idée de ce qui se trouve dans le fichier lorsqu'ils travaillent avec.
la source
Une autre façon de le faire est de le sous-classer:
Et puis importez my.own.FQNDate dans les packages contenant java.util.Date.
la source
Matchers
et MockitoMatchers
dans la même classe. Cela semble fonctionner avec des méthodes statiques..when
s,.thenReturn
s etc. - supprime leMockito.
gonflement.Si vous avez votre propre classe de date, vous devez la distinguer de la classe Date intégrée. c'est-à-dire pourquoi avez-vous créé le vôtre. Quelque chose comme ImmutableDate ou BetterDate ou NanoDate, même MyDate indiquerait pourquoi vous avez votre propre classe de date. Dans ce cas, ils auront un nom unique.
la source
Vous pouvez en importer un à l'aide de l'importation. Pour toutes les autres classes similaires, vous devez spécifier des noms de classe complets. Sinon, vous obtiendrez une erreur de compilation.
Par exemple:
la source
Ce scénario n'est pas si courant dans la programmation du monde réel, mais pas si étrange aussi. Il arrive parfois que deux classes dans des packages différents aient le même nom et que nous ayons besoin des deux.
Il n'est pas obligatoire que si deux classes ont le même nom, alors les deux contiendront les mêmes fonctionnalités et nous ne devrions en choisir qu'une.
Si nous avons besoin des deux, il n'y a aucun mal à l'utiliser. Et ce n'est pas non plus une mauvaise idée de programmation.
Mais nous devrions utiliser des noms complets des classes (qui ont le même nom) afin de préciser à quelle classe nous nous référons également.
:)
la source
Je rencontre ce problème lorsque, par exemple, mappe une classe à une autre (comme lors du passage à un nouvel ensemble de classes pour représenter des données de personne). À ce stade, vous avez besoin des deux classes car c'est tout le but du code - pour mapper l'une à l'autre. Et vous ne pouvez pas renommer les classes dans les deux endroits (encore une fois, le travail est de mapper, pas d'aller changer ce que quelqu'un d'autre a fait).
Pleinement qualifié est un moyen. Il semble que vous ne pouvez pas réellement inclure les deux instructions d'importation, car Java s'inquiète de savoir de quelle "personne" il s'agit, par exemple.
la source
Si vous voulez vraiment ou avez besoin d'utiliser le même nom de classe à partir de deux packages différents, vous avez deux options:
1-en choisir un à utiliser dans l'importation et utiliser le nom de classe complet de l'autre:
2-utilisez toujours le nom de classe complet:
la source
J'ai juste eu le même problème, ce que j'ai fait, j'ai arrangé l'ordre des bibliothèques dans l'ordre, par exemple il y avait java.lang.NullPointerException et javacard.lang.NullPointerException. J'ai créé la première comme bibliothèque par défaut et si vous deviez utiliser l'autre, vous pouvez spécifier explicitement le nom complet de la classe qualifiée.
la source
Lorsque vous appelez des classes avec les mêmes noms, vous devez spécifier explicitement le package à partir duquel la classe est appelée.
Vous pouvez faire comme ceci:
Production:
la source