web-dev-qa-db-fra.com

Comment créer un alias de type variable dans Java

disons que j'ai ce code

Map<String, String> list = new HashMap<String, String>();
list.put("number1", "one");
list.put("number2", "two");

comment puis-je faire un "alias" le type

Map<String, String>

à quelque chose qui est plus facile à réécrire comme

// may be something like this
theNewType = HashMap<String, String>;

theNewType list = new theNewType();
list.put("number1", "one");
list.put("number2", "two");

fondamentalement, ma question est de savoir comment créer un "alias" pour un "type", afin que je puisse le rendre plus facile à écrire et plus facile lorsque vous avez besoin de changer le code du programme entier.

Merci et désolé si c'est une question idiote. Je suis un peu nouveau en Java.

46
Lee

Il n'y a pas d'alias en Java. Vous pouvez étendre la classe HashMap avec votre classe comme ceci:

public class TheNewType extends HashMap<String, String> {
    // default constructor
    public TheNewType() {
        super();
    }
    // you need to implement the other constructors if you need
}

Mais gardez à l'esprit que ce sera une classe, ce ne sera pas la même chose que vous tapez HashMap<String, String>

45
KARASZI István

Il n'y a pas d'équivalent typedef en Java et il n'y a pas d'idiome commun pour les types d'alias. Je suppose que tu pourrais faire quelque chose comme

class StringMap extends HashMap<String, String> {}

mais ce n'est pas courant et ne serait pas évident pour un responsable de programme.

11
Rom1

Bien que Java ne le supporte pas, vous pouvez utiliser une astuce générique pour le simuler.

class Test<I extends Integer> {
    <L extends Long> void x(I i, L l) {
        System.out.println(
            i.intValue() + ", " + 
            l.longValue()
        );
    }
}

Source: http://blog.jooq.org/2014/11/03/10-things-you-didnt-know-about-Java/

8
Andrey

Le plus proche pourrait penser à faire une classe wrapper comme ça

class NewType extends HashMap<String, String> {
     public NewType() { }
}

Je souhaite vraiment Java avait une fonction d'alias de type sonore.

4
Ingo

Rien de tel n'existe en Java. Vous pourriez être en mesure de faire quelque chose avec IDE modèles ou saisie semi-automatique, et attendons avec impatience (limité) inférence de type générique in Java sept.

1