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