Подтвердить что ты не робот

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

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

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

using Sys=System;

или Vb:

Imports Sys=System
4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Вы не можете сделать это во всех случаях, потому что некоторые из них являются конечными классами, но вы можете расширить класс

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

Ответ 4

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

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

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

Ответ 5

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

}