【问题标题】:Is it possible to import the array type, in Java?是否可以在 Java 中导入数组类型?
【发布时间】:2011-06-09 10:00:30
【问题描述】:

Java中可以导入“数组类型”吗?

我知道这将是一个无用的导入,但我们可以显式导入 java.util.String(虽然 java.lang 会自动导入)甚至是当前编译单元中正在定义的类...

是否可以进行这种荒谬的导入?

【问题讨论】:

    标签: java arrays import


    【解决方案1】:

    没必要。一旦理解了T 类型,就会自动理解T[], T[][], T[][][]...。对于编译器和运行时都是如此。 有效,一旦T被导入,所有T[]...都被导入;一旦T 被类加载器加载,所有T[]... 都被同一个类加载器加载。

    【讨论】:

    • 我知道这是不必要的。我只是想知道它是否可能。但事实并非如此。
    【解决方案2】:

    你不能,而且在 Java 中也没有单一的数组类型。从不同元素类型创建的数组类型本身会有所不同。

    如果您尝试编译此代码,很容易看到这一点:

    String [] stringArray = new String[4];
    Object [] objectArray = new Object[4];
    objectArray = stringArray; //This won't work even though individually every String can be cast to Object
    

    【讨论】:

    • 你是对的。但是您无法从您的示例中看到它,因为List<String> 也与List<Object> 不兼容(JLS 中某处描述的参数化类型属性)。但是objectArray.getClass()stringArray.getClass() 不同,而参数化类型不会发生这种情况。
    • 没错,我不想因为提到 parameterezid 类而使其过于复杂。我应该补充的是,你甚至不能将一个数组类型转换为另一个数组类型。
    【解决方案3】:

    Array 更像是由语言定义的原始类型。当您编写int[] a = new int[5]; 时,您实际上在做的是留出5 个可以容纳原始int 类型的内存位置。任何其他数组声明都会发生同样的事情。换句话说,你不能从java中导入它。

    【讨论】:

    • +1 用于提及原语。我想补充一点,大多数原始类型都有Object-派生版本。 (mindprod.com/jgloss/intvsinteger.htmlint vs.Integermindprod.com/jgloss/intvsinteger.html)同样,java有几种集合类型(派生自Object),如ArrayListLinkedList等。
    • 是的,有 Integer、Float、Double,它们是其原始类型的不可变版本,也用作包装类,因为要使用模板创建集合,您需要一个对象。比如 ArrayList
    【解决方案4】:

    不,您不能导入数组类型。好像不能导入intdouble

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2012-08-07
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 2019-08-03
      • 1970-01-01
      • 2017-09-14
      相关资源
      最近更新 更多