java, есть ли способ импортировать класс под другим именем

#java #syntactic-sugar #import

#java #синтаксический сахар #импорт

Вопрос:

есть ли способ импортировать класс под другим именем? Например, если у меня есть класс с именем javax.C и другой класс с именем java.C я могу импортировать javax.C под именем C1 и импортировать java.C под именем C2.

Мы можем сделать что-то подобное на C#:

 using Sys=System;
  

или Vb:

 Imports Sys=System
  

Комментарии:

1. Вы можете сделать это в Scala. Вот так: импортируйте java.util. {ArrayList => JavaList}

2. Существует проект JEP (предложения по улучшению JDK) об этом Изменении имени импортируемого типа (сглаживание)

Ответ №1:

Нет, в Java ничего подобного нет. Вы можете импортировать классы только под их оригинальным именем и должны использовать полное имя для всего, что вы не импортируете (кроме тех, что в java.lang и пакете текущего класса).

Ответ №2:

Короче говоря, нет, это невозможно в Java.

Ответ №3:

Нет. Я думаю, что Java намеренно отброшена typedef . Хорошая новость в том, что если вы видите тип, вы знаете, что это такое. Это не может быть псевдонимом для чего-то другого; или псевдонимом для псевдонима to …

Если новая концепция действительно заслуживает нового имени, она, скорее всего, также заслуживает нового типа.

Пример использования Sys=System будет неодобрительно воспринят большинством разработчиков Java.

Комментарии:

1. на самом деле это просто пример. лучшим вариантом использования был бы импорт классов с конфликтующими именами (это будет происходить постоянно)

2. столкновение имен @Pacerier не очень распространено в java. и когда это произойдет, используйте полное имя класса с именем пакета, целью которого является конкретно разрешение конфликта имен.

3. я не верю, что целью пакетов является специально разрешение конфликтов имен. Пакеты предназначены для логической группировки объектов. Столкновение имен «ожидается» в ООП, и именно поэтому у нас есть пакеты / пространства имен

4. цель пакета № 1 — предотвратить конфликты имен.

5. Конфликты имен совершенно обычны в Java. Настолько распространенный, что действительно раздражает невозможность переименовать импортируемые файлы. Узел, дата, отображение, прямоугольник, точка, вектор, список, называйте как хотите. НЕНАВИЖУ ПИСАТЬ new qwerty.uiopasdf.ghjkl.yxcvbnm.qetuos.fhjlxvn.Node() !!!111

Ответ №4:

Java не поддерживает статическое переименование. Одна из идей состоит в том, чтобы присвоить объекту, о котором идет речь, новое имя класса (но это может быть не очень хорошей идеей из-за определенных побочных эффектов / ограничений, например, ваш целевой класс может иметь окончательный модификатор. Там, где это разрешено, код может вести себя по-другому, если используется явная проверка типа getClass() или instanceof ClassToRename и т.д. (приведенный ниже пример, адаптированный из другого ответа)

 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);}
  }

}