39

有没有办法我们可以用另一个名字导入一个类?就像我有一个名为 javax.C 的类和另一个名为 java.C 的类,我可以在名称 C1 下导入 javax.C 并在名称 C2 下导入 java.C。

我们可以在 C# 中做这样的事情:

using Sys=System;

或 Vb:

Imports Sys=System
4

4 回答 4

44

不,Java 中没有类似的东西。您只能以其原始名称导入类,并且必须为所有不导入的类使用完全限定名称(除了那些在java.lang和当前类的包中的类)。

于 2011-04-24T00:29:31.970 回答
4

简而言之,不,这在 Java 中是不可能的。

于 2011-04-24T00:30:57.850 回答
2

不,我认为 Java故意放弃了typedef. 好消息是,如果你看到一种类型,你就会知道它是什么。它不能是其他东西的别名;或别名的别名...

如果一个新概念真的值得一个新名字,它很可能也值得一个新类型。

Sys=System大多数 Java 开发人员不赞成使用 的用法示例。

于 2011-04-24T00:56:21.503 回答
1

Java 不支持静态重命名。一个想法是使用新的类名对有问题的对象进行子类化(但由于某些副作用/限制可能不是一个好主意,例如,您的目标类可能具有 final 修饰符。在允许的情况下,如果显式类型检查,代码的行为可能会有所不同使用getClass()orinstanceof 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);}
  }

}
于 2017-01-02T14:52:12.380 回答