11
votes

Collections de type-coffre-fort, génériques et vides avec des génériques statiques

Je retourne des collections vides vs. NULL chaque fois que possible. Je bascule entre deux méthodes pour le faire en utilisant Java. util.Collections : xxx pré>

videyliste () code> est censé être sûr. Mais j'ai récemment découvert: p> xxx pré>

etc. P>

Je vois cette méthode dans l'explorateur de package Eclipse: P>

<clinit> () : void


2 commentaires

Quelle est la question? n'est pas une méthode générique, mais le nom (magie généré par compilateur) de la méthode du constructeur spécial qui fait une initialisation de classe.


Désolé ... aurait dû être plus clair. Je pense que j'ai mal supposé que le bloc statique avait quelque chose à voir avec le type générique statique.


4 Réponses :


19
votes
return Collections.<ComplexObject> emptyList();
Using this will get rid of warnings from Eclipse about non-generic collections.Having said that, a typed empty list is going to be functionally identical to an untyped empty list due to empty list being immutable and Java erasing generic types at compile time.

4 commentaires

@Tom Hawtin - Tackline: "Vous voudrez peut-être envisager de l'utiliser simplement pour vous débarrasser des avertissements d'Eclipse sur l'utilisation de collections non génériques." En d'autres termes, cela corrige le code, plutôt que d'utiliser un @suppresswarnings Annotation.


Licornes Euh, oui. Bien que le sentiment semble être que des avertissements ne comptent pas et font quelque chose de hasard à se débarrasser d'eux.


@Tom Hawtin - Tackline: Je l'ai reformulé maintenant. Cependant, il ne change pas qu'une liste de vide immuable qui est typée va être identique à celle non typée. À mon avis, les avertissements sur l'utilisation de collections non génériques sont inutiles de toute façon; Si quelqu'un veut utiliser une collection non générique, pourquoi le compilateur devrait-il signaler cela comme un avertissement?


Licornes: Les types bruts sont fournis pour la compatibilité en arrière. Pour les utiliser n'est pas un java idiomatique.



1
votes

est le nom de la méthode dans laquelle le code d'initialisation de la classe est collecté lors de la compilation. (C'est-à-dire que tout le code à l'intérieur de statique {} blocs et les initialiseurs des membres statiques, dans la commande de code source.)

Cela n'a rien à voir avec des paramètres de type explicites dans les invocations de méthode.


0 commentaires

2
votes

code> est le bloc d'initialisateur statique. C'est un bloc de code qui est exécuté exactement une fois (lorsque la classe est chargée).

Ainsi, au lieu d'écrire P>

class A {
   static int x;

   static {  // static initializer starts
      x = 5; 
   }
}


0 commentaires

9
votes

EDIT: Comment est le type générique statique accompli? P>

http://www.docjar.com/html/ API / JAVA / UTIL / COLLECTIONS.JAVA.HTML P>

public class Collections {
    ...
    public static final List EMPTY_LIST = new EmptyList<Object>();
    ...
    public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }
    ...
}

2 commentaires

Je savais que c'était quelque chose de simple. Le préfixe de type de retour générique est tout ce qui permet à cela? J'ai appris quelque chose aujourd'hui ...


Si par "Préfixe de type de retour générique", vous voulez dire le premier "", puis oui. Je ne l'appelerais pas si - vous ne devriez pas y penser dans le type de retour. Pensez-y plus en tant que modificateur (méthode) comme "public", "statique" et "finale". C'est le modificateur de type paramétré sur la déclaration de méthode qui fait une méthode générique.