Lorsque le nom de type est trop long, en C #, je peux créer un alias comme celui-ci: et je peux l'utiliser comme ceci: p> Dict d = new Dict();
d.Add("key", "value");
4 Réponses :
Réponse courte: Cependant, vous pouvez (et devrait) Si vous (ajout d'alias de classe a été demandée avant comme une amélioration de Java , et est toujours en attente) p> P> importer des classes code> afin de ne pas utiliser leur nom complet: p> < Pré> xxx pré>
@Yuval - c'est un mauvais exemple. Toutes les classes dans java.lang code> sont implicitement importées sur demande.
@Yuval - Je ne veux pas créer de nouveau type. Sera plus de problèmes que d'avantages.
@Yuval - hein? I >> SAVOIR << C'est "juste un exemple". Si vous utilisez comme exemple, une classe qui n'a pas besoin d'être importée, vous pouvez diriger des débutants pour penser qu'ils doivent tout importer. Choisissez un meilleur exemple; c'est-à-dire n'importe quelle classe qui n'est pas dans java.lang code>.
@MYKHAYLO - Je suggérais juste un hack. Comme je l'ai mentionné dans ma réponse, Java ne vous donne aucun moyen de réaliser cela.
@Yuval - En outre, si vous regardiez au problème de la défaillance de l'insecte, vous verrez qu'il est fermé comme un duplicata d'un autre RFE, et ce dernier est toujours ouvert. Il est donc un peu trompeur d'affirmer que l'amélioration a été refusée.
Créer une nouvelle classe en utilisant des types génériques concrets (comme votre exemple MyMap) est utile pour clarifier des intentions.
@Stephen - pas de dés. Si tous les exemples de moi (ou de quelqu'un d'autre) ont jamais été publiés à 100% - N'ai-pied-à-faire, je serais dans un monde de douleur.
-1 pour un exemple trompeur et trompeur de côté du statut de la RFE
@Yuval - Bien sûr, merci pour votre réponse. Toute allusion est précieuse pour moi. Mais créer un nouveau type n'est pas une option pour moi.
Vous ne pouvez pas créer d'alias, mais vous pouvez importer code> paquets ( JLS 7.5 Déclarations d'importation ) de sorte que vous n'ayez pas à qualifier complètement les noms de classe dans ce paquet.
import static java.util.Arrays.asList;
...
System.out.println(asList(1, 2, 3));
Oui je sais. Mais parfois, le nom de type (sans espace de noms / paquet) est trop long. Exemple: Hashmap
Aucun aliasing, désolé. Trop peu d'avantages, trop d'inconvénients.
Vous pouvez réellement faire de la classe statique publique MyHashMap étend hashmap
@Dean: Ce n'est pas un aliasing, c'est défini une nouvelle classe, qui veut spécifiquement éviter.
Non, vous ne pouvez pas faire comme ça dans Java.here Vous devez importer les packages, si vous ne souhaitez pas importer le package, vous devez utiliser un nom de classe entièrement qualifié. P>
i deuxième tour de sous-classe de Yuval. Ce n'est pas une grosse affaire en matière de performance ou de sémantique. P>
in c #, dictionnaire
"Ce n'est pas une grosse affaire" est une déclaration ridicule sans contexte. Et c # ne fait pas de génériques. CLR fait, et il sait comment replier le code. Donc non, "chaque instanciation d'un type générique crée une nouvelle classe à l'exécution" est également une fausse revendication.
Personnellement, je ne ferais pas cela. Je pense que cela rend le code plus difficile à comprendre. J'importe souvent l'espace de noms complet, donc je n'ai pas besoin de qualifier les types, mais le bit d'aliasing IMO rend simplement plus difficile de comprendre le code en déplaçant la définition de type de l'utilisation. Je préférerais:
à l'aide de System.Collection.Generic; ... var d = nouveau dictionnaire (); code>