2011-11-02 54 views

回答

6

不,Java是一种强类型语言。因此,如果阵列输入为Stringint,则无法将Stringint添加到同一阵列。

但是,如果您的数组键入为Object,则可以将StringInteger(整数字面值将被自动装箱)添加到同一个数组。这不被推荐,可能是您应该更多地考虑您的设计的一个标志。你需要问自己的第一个问题是为什么你需要这样做。如果你确实有一个合理的理由,那么最好从一个转换到另一个,而不是将一个数组键入为Object

有一个追赶呼叫数组,您可以在任何物体推在一个坏主意的原因很多:

  • 您正在执行的对象之间没有分离。对象是否实际上相互关联?如果是这样,则可以使用接口键入或创建每个类型扩展的抽象类。
  • 既然你没有对象之间的分离,你拉出阵列的任何东西是Object。你怎么知道它是什么?你需要明确地检查它的类型。这是一个非常麻烦和不可维护的设计。
  • 你基本上最终会失去类型安全性,并且不能从编译期间显示的类型不匹配错误中受益。这会隐藏可能忘记检查类型的代码中的可能错误,或者将对象投射到错误类型的位置。这可能会导致各种噩梦般的错误。
  • 你的代码将被显式检查和强制转换,并且将无法维护(由你或其他人执行)。
  • 你的代码无处不在抽象抽象。没有人可以查看数组并且了解数组包含的内容。任何使用你的代码的人都需要记住数量庞大的细节,以确定数组可以包含哪些类型的对象。
  • 混淆从来不是一个有效的理由。代码应该清晰,易于阅读,易于维护且易于理解(对于您和任何其他将阅读您的代码的人员)。任何看起来模糊或者“聪明”的代码要么需要重写或者广泛记录以解释其“聪明”的原因。至于混淆来源,这是一个没有问题,因为无论如何你将分发.class文件。你可以通过反编译器运行它来查看源代码。没有任何东西可以在源代码上执行以令人满意地模糊您的代码;你只会让你或其他人难以维持。混淆可以在字节码级完成,所以这并不适用于这种情况。
+0

为什么“不推荐”。我可以看到潜在的用例,特别是在混淆中。我同意在大多数情况下这不是必要的。 – jli

+3

@jli让我们为后期编译的jar混淆器留下模糊处理。当谈到开发人员实际编写的代码时,让我们尽可能简单地处理(或者至少是合理的)。 – corsiKa

+1

@jli打算发表评论,但最终结果是相当长,所以看看我的编辑。 –

3

是的,这是可能的,但它不是好的做法。

Object[] myObjects = new Object[] {array1[i], array2[i], "name1", value1, value2, "name2", value1, value....}; 

它必须是对象

+0

mmm ...你最终可以添加一个整数..int不是一个对象。 – Heisenbug

+1

这是这样糟糕的设计,我甚至不知道为什么有人想要这样做。 –

+0

int整数是“自动装箱” – Max

0

在你的字符串数组的数组,你可以有“123”,然后当你需要它转换为int后。

0

您不能使用String等对象向数组添加基本类型(包括int)。但是,如果您声明一个Object []数组,则可以将Integer自动装箱到Integer中。

Object[] array = new Object[2]; 
array[0] = "Hello"; 
array[1] = 42; 

虽然我不建议这样做,如果模拟这种字符串和int作为一个类的属性会工作。

0

是的,这绝对是可能的,只是有一个原始对象的数组。

例如:

Object[] arr = new Object[10]; 
arr[0] = 10; // boxed to Integer class 
arr[1] = "foo"; // String class 

然后可以使用instanceof以确定存储在一个特定的索引对象的类型。

例如:

if (arr[0] instanceof Integer) ((Integer) arr[0]) += 10; 

注意,这并不一定习惯一个很好的做法,但它确实有应用。

1

严格地说:第
否则:是最实用的目的:

Object[] array = { 42, "foo" }; 

请注意,该42不是int而是`Integer'。但由于自动装箱和拆箱,你不会注意到其中的差异。权衡当然是性能和垃圾收集器的开销。

此外,数组必须是Object[]类型,而不是String[]类型,也不是int[]类型。

0

您可以使用java.util.ArrayList来做到这一点。您需要确保仔细检查将物品拉出时所得到的结果。

+1

''ArrayList'在这种情况下并不比普通数组好,它将与'Object'数组相同。 – jli

+0

确实如此,但我认为用户可能会更容易尝试,因为我猜测他对java /编程来说很新颖 –

+0

可以用于同样的事情,并且不会更容易使用。 – jli

相关问题