【问题标题】:java, is there a way we can import a class under another namejava,有没有办法我们可以用另一个名字导入一个类
【发布时间】:2011-08-11 16:35:14
【问题描述】:

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

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

using Sys=System;

或Vb:

Imports Sys=System

【问题讨论】:

标签: java syntactic-sugar import


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      Sys=System 的用法示例将被大多数 Java 开发人员所反对。

      【讨论】:

      • 其实这只是一个例子。更好的用例是导入名称冲突的类(这种情况会一直发生)
      • @Pacerier 名称冲突在 java 中并不常见。并且当它发生时,使用完整的类名和包名,其目的是专门解决名称冲突。
      • 我不认为包的目的是专门解决名称冲突。包用于对事物进行逻辑分组。名称冲突在 OOP 中是“预期的”,这就是我们有包/命名空间的原因
      • 包的#1目的是防止名称冲突。
      • 名称冲突在 Java 中非常普遍。如此普遍以至于不能重命名导入真的很烦人。节点、日期、显示、矩形、点、向量、列表,应有尽有。 我讨厌写new qwerty.uiopasdf.ghjkl.yxcvbnm.qetuos.fhjlxvn.Node()!!!111
      【解决方案4】:

      Java 不支持静态重命名。一个想法是使用新的类名对有问题的对象进行子类化(但由于某些副作用/限制可能不是一个好主意,例如,您的目标类可能具有 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);}
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 2020-01-04
        相关资源
        最近更新 更多