Ответ 1
Нет, в Java нет ничего подобного. Вы можете импортировать только классы под своим первоначальным именем и использовать полное имя для всего, что вы не импортируете (кроме тех, что находятся в java.lang
и в текущий класс).
Есть ли способ импортировать класс под другим именем? Например, если у меня есть класс javax.C и еще один класс java.C, я могу импортировать javax.C под именем C1 и импортировать java.C под именем C2.
Мы можем сделать что-то подобное в С#:
using Sys=System;
или Vb:
Imports Sys=System
Нет, в Java нет ничего подобного. Вы можете импортировать только классы под своим первоначальным именем и использовать полное имя для всего, что вы не импортируете (кроме тех, что находятся в java.lang
и в текущий класс).
Короче говоря, нет, это невозможно в Java.
Вы не можете сделать это во всех случаях, потому что некоторые из них являются конечными классами, но вы можете расширить класс
class RenameTest {
private static class MyRenamedClass extends ClassToRename { }
MyRenamedClass renamed = new ClassToRename("lol, the class was renamed");
void foo() {
renamed.originalFoo(); // because MyRenamedClass doesn't override any
// methods, it always defaults to the parent class
}
}
Нет. Я думаю, что Ява намеренно бросила typedef
. Хорошая новость заключается в том, что если вы видите тип, вы знаете, что это такое. Это не может быть псевдоним для чего-то другого; или псевдоним для псевдонима, чтобы...
Если новая концепция действительно заслуживает нового имени, она, скорее всего, также заслуживает нового типа.
Пример использования Sys=System
будет недоволен большинством разработчиков Java.
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);}
}
}