web-dev-qa-db-fra.com

java, existe-t-il un moyen d'importer une classe sous un autre nom

existe-t-il un moyen d’importer une classe sous un autre nom? Comme si j’avais une classe appelée javax.C et une autre classe appelée Java.C, je peux importer javax.C sous le nom C1 et importer Java.C. sous le nom de C2.

Nous pouvons faire quelque chose comme ceci en C #:

using Sys=System;

ou Vb:

Imports Sys=System
38
Pacerier

Non, il n'y a rien de tel en Java. Vous ne pouvez importer que des classes sous leur nom d'origine et devez utiliser le nom complet pour tout ce que vous n'importez pas (à l'exception de celles figurant dans Java.lang et du package de la classe en cours).

43
Michael Borgwardt

Pour être bref, non, ce n'est pas possible en Java.

4
Michiel Borkent

Non, je pense que Java délibérément abandonné typedef. La bonne nouvelle est que si vous voyez un type, vous savez ce que c'est. Ce ne peut pas être un alias pour autre chose; ou un alias à un alias à ...

Si un nouveau concept mérite vraiment un nouveau nom, il mérite également un nouveau type.

L'exemple d'utilisation de Sys=System sera mal vu par la plupart des développeurs Java.

2
irreputable

Java ne supporte pas le renommage statique. Une idée est de sous-classer l'objet en question avec un nouveau nom de classe (mais cela peut ne pas être une bonne idée en raison de certains effets secondaires/limitations, par exemple votre classe cible peut avoir le modificateur final. Lorsque autorisé est utilisé getClass() ou instanceof ClassToRename, etc. (exemple ci-dessous adapté d'une réponse différente)

class MyApp {

  public static void main(String[] args) {
    ClassToRename parent_obj = new ClassToRename("Original class");
    MyRenamedClass extended_obj_class_renamed = new MyRenamedClass("lol, the class was renamed");
    // these two calls may be treated as the same
    // * under certain conditions only *
    parent_obj.originalFoo();
    extended_obj_class_renamed.originalFoo();
  }  

  private static class ClassToRename {
    public ClassToRename(String strvar) {/*...*/}
    public void originalFoo() {/*...*/}
  }

  private static class MyRenamedClass extends ClassToRename {
    public MyRenamedClass(String strvar) {super(strvar);}
  }

}
1
area5one