web-dev-qa-db-ja.com

java、クラスを別の名前でインポートできる方法はありますか

別の名前でクラスをインポートする方法はありますか? javax.Cと呼ばれるクラスとJava.Cと呼ばれる別のクラスがある場合のように、C1という名前でjavax.Cをインポートし、C2という名前でJava.Cをインポートできます。

C#では次のようなことができます。

using Sys=System;

またはVb:

Imports Sys=System
38
Pacerier

いいえ、Javaにはそのようなものはありません。クラスは元の名前でのみインポートでき、インポートしないものすべてに完全修飾名を使用する必要があります(Java.lang内のクラスと現在のクラスのパッケージを除く)。

43

要するに、これはJavaでは不可能です。

4
Michiel Borkent

いいえ。Java 故意に捨てられたtypedefだと思います。良いニュースは、型が表示されれば、それが何であるかを知っていることです。 t他のエイリアス、または...のエイリアス.

新しいコンセプトが本当に新しい名前に値するなら、それはおそらく新しいタイプにも値するでしょう。

Sys=Systemの使用例は、ほとんどのJava devs。

2
irreputable

Javaは静的な名前の変更をサポートしていません。問題のオブジェクトを新しいクラス名でサブクラス化することも1つのアイデアです(ただし、ターゲットクラスにfinal修飾子がある場合など、特定の副作用/制限があるため、良い考えではない場合があります。許可されている場合、明示的な型チェックの場合、コードの動作が異なる場合があります。使用される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);}
  }

}
1
Rob Hoff