Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果数组是相同数据类型的集合,那么如何在一个数组中存储不同的数据类型?_Java_Arrays_Oop_Object - Fatal编程技术网

Java 如果数组是相同数据类型的集合,那么如何在一个数组中存储不同的数据类型?

Java 如果数组是相同数据类型的集合,那么如何在一个数组中存储不同的数据类型?,java,arrays,oop,object,Java,Arrays,Oop,Object,实际上,java专家说,你可以通过使用对象类的对象来实现这一点,在java中,对象类是宇宙超类。如果这是可能的话,那么我们如何定义数组是相同数据类型的集合???在java中,数组是而不是集合。您的专家似乎引用了一个根类型的数组,比如 Object[] array = { "Test", 1, 1.0 }; for (Object obj : array) { System.out.println(obj.getClass()); } 输出为 class java.lang.Stri

实际上,java专家说,你可以通过使用对象类的对象来实现这一点,在java中,对象类是宇宙超类。如果这是可能的话,那么我们如何定义数组是相同数据类型的集合???

在java中,数组是而不是集合
。您的专家似乎引用了一个根类型的数组,比如

 Object[] array = { "Test", 1, 1.0 };
 for (Object obj : array) {
   System.out.println(obj.getClass());
 }
输出为

class java.lang.String
class java.lang.Integer
class java.lang.Double
这是可能的,因为每个Java类型都扩展(隐式或显式),Java可以扩展基本类型。来自Javadoc-

对象
是类层次结构的根。每个类都有
对象
作为超类。所有对象(包括数组)都实现此类的方法


因为在声明数组时指定了数据类型。数组中的每个对象都直接或通过超类具有此数据类型。例如:

Person[] people = new Person[3];
people[0] = new Employee();// where Employee extends Person
people[1] = new Teacher(); // where Teacher extends Person
people[2] = new Person();
所有这些对象都将Person作为其超类。这就是它工作的原因。

这是真的

假设您有两个类:动物和植物,以及这些类中的一个对象:

Animal cat = new Animal();
Plant tree = new Plant();
将它们存储在对象类型的集合中:

List<Object> myList = new ArrayList<Object>();

myList.add(cat);
myList.add(tree);
List myList=new ArrayList();
myList.add(cat);
添加(树);
由于Animal and Plant类是Object类的后代(在Java中,一切都是Object类的后代),并且您的集合可以保存Object类型的对象,因此您可以将这两个对象添加到集合中。

是的,可以这样做(如其他答案所示),但通常在一个集合中存储不同类型的对象不是一个很好的做法(不确定是否引用数组或集合,如ArrayList,但这并不重要),因为它不是类型安全的,并强制您使用多个
实例和铸件,以便对该数组/集合的元素执行任何有意义的操作

如果要在数组/集合中存储不同不相关类型的对象,最好创建一个以有意义的方式对这些对象进行分组的类,并使用只包含类的对象的数组/集合

public MyClass 
{
    String aString;
    int anInt;
    double aDouble;
    ...
    public MyClass (String a, int b, double c) 
    {
        this.aString = a;
        this.anInt = b;
        this.aDouble = c;
    }
    ...
}

MyClass [] array = { new MyClass("Test", 1, 1.0) , new MyClass("Test2", 2, 2.0) };
通过这种方式,您可以执行以下操作:

for (MyClass obj : array)
    if (obj.getaString().contains("something")) {}

如果您只是将所有对象放入一个对象数组(对象[]),您就不能执行类似数组[0]。包含(“某物”)的操作,因为
Object
没有
contains
方法,如果您将数组[0]强制转换为字符串,如果您不先检查数组[0]的类型,您就有发生ClassCastException的风险。

您是什么意思?您可以很容易地定义相同数据类型的数组:String[]strs=newstring[10];如果你雇了一个木匠,请他建造一个鸟笼来容纳任何鸟类。现在,你应该能够适应鹦鹉、鹰或任何鸟类。小结:如果数组框架是为Object bird构建的,那么可以适合任何类型的java bird,因为所有java bird都是Object bird。从中,数组是一个容器对象,它包含固定数量的单个类型的值。数组的长度是在创建数组时确定的。与之相比。请注意,数组没有实现
集合
。是的,我同意您的看法,但是数组的定义是什么,即“数组是相同数据类型的集合”。这个定义是用C++来实现的,Java.java中的引用链接是肯定的,java不是C++,但是数组的定义没有改变。我也在要求Java中的数组定义“数组是一个容器对象,它保存了固定类型的单个值的值”。。因为
集合在Java中有特定的含义。首先,我要感谢大家,我同意数组可以使用超类对象存储不同数据类型的值。安全与否是另一回事…现在出现了一个疑问,数组的定义是正确的。。??