Java 展开数组而不知道其类型

Java 展开数组而不知道其类型,java,arrays,Java,Arrays,如何在不知道数组类型的情况下扩展数组 我有一个对象[],我知道它只包含,比如说,Car实例。当我尝试将其键入一辆汽车[],它会抛出一个ClassCastException。我在一个没有泛型的环境中工作 我必须使用for循环手动将每个元素复制到新数组中,如下所示: Car[] cars = new Car[objects.length]; for (int i = 0; i < objects.length; i++) { cars[i] = (Car) objects[i]; }

如何在不知道数组类型的情况下扩展数组

我有一个
对象[]
,我知道它只包含,比如说,
Car
实例。当我尝试将其键入一辆
汽车[]
,它会抛出一个ClassCastException。我在一个没有泛型的环境中工作

我必须使用for循环手动将每个元素复制到新数组中,如下所示:

Car[] cars = new Car[objects.length];
for (int i = 0; i < objects.length; i++) {
    cars[i] = (Car) objects[i];
}
Car[]cars=新车[objects.length];
for(int i=0;i

?仅仅因为
对象[]
碰巧只包含
Car
s,并不意味着它可以强制转换为
Car[]
。您需要将数组的内容复制到新的
Car[]
,必要时进行强制转换


请记住,数组本身就是对象,它们的类型不受数组中的内容控制——相反

仅仅因为
对象[]
碰巧只包含
Car
s,并不意味着它可以强制转换为
Car[]
。您需要将数组的内容复制到新的
Car[]
,必要时进行强制转换

请记住,数组本身就是对象,它们的类型不受数组中的内容控制——相反

在Java 6中,可以使用来“调整”数组的大小

我现在不知道您的实际问题,但在Java<6中调整任意类型数组大小的常见解决方案是:

Class elementType = oldArray.getClass().getComponentType();
Object[] newArray = (Object[])java.lang.reflect.Array.newInstance(elementType, newSize);
然后可以使用
System.arraycopy()
根据需要将值从旧数组复制到新数组。

在Java 6中,可以使用“调整”数组大小

我现在不知道您的实际问题,但在Java<6中调整任意类型数组大小的常见解决方案是:

Class elementType = oldArray.getClass().getComponentType();
Object[] newArray = (Object[])java.lang.reflect.Array.newInstance(elementType, newSize);

然后,您可以使用
System.arraycopy()
根据需要将值从旧数组复制到新数组。

您可能遇到的一个问题是,如果数组具有基元,则无法将其强制转换到对象[]

通过使用java.lang.reflect.Array上的一些帮助程序,您可以使用原语和对象来实现这一点

这是一个如何安全处理数组并将所有值转换为字符串的示例

public String[] stringifyValue(Object value) {
        String[] arrayValue;

 
        if (value.getClass().isArray() ){
            int arrayLength = Array.getLength(value);
            arrayValue = new String[arrayLength];

            for (int i=0; i < arrayLength; i++) {
                arrayValue[i] = String.valueOf(Array.get(value, i));
            }
        }
    }
公共字符串[]字符串化值(对象值){
字符串[]数组值;
if(value.getClass().isArray()){
int arrayLength=Array.getLength(值);
arrayValue=新字符串[arrayLength];
对于(int i=0;i
您可能遇到的一个问题是,如果数组具有基元,则无法将其强制转换为对象[]

通过使用java.lang.reflect.Array上的一些帮助程序,您可以使用原语和对象来实现这一点

这是一个如何安全处理数组并将所有值转换为字符串的示例

public String[] stringifyValue(Object value) {
        String[] arrayValue;

 
        if (value.getClass().isArray() ){
            int arrayLength = Array.getLength(value);
            arrayValue = new String[arrayLength];

            for (int i=0; i < arrayLength; i++) {
                arrayValue[i] = String.valueOf(Array.get(value, i));
            }
        }
    }
公共字符串[]字符串化值(对象值){
字符串[]数组值;
if(value.getClass().isArray()){
int arrayLength=Array.getLength(值);
arrayValue=新字符串[arrayLength];
对于(int i=0;i
可能重复-是的,这与
字符串[]
是一样的,但它是相同的东西/原因/答案。嗯,不要认为它是重复的,因为这更多的是关于任意数组的运行时类型。可能重复-是的,这与
字符串[]
是相同的东西/原因/答案。嗯,不要认为它是重复的,因为这更多的是关于一个任意数组的运行时类型。我认为OP想要改变数组的类型,而不仅仅是调整它的大小-这个问题使用了“扩展”这个词使它变得混乱。由于组件类型在编译时是已知的,所以无论如何反射都是多余的。这可能是真的。在这种情况下,反射实际上是不需要的。我认为OP想要改变数组的类型,而不仅仅是调整它的大小-这个问题使用了“扩展”这个词使它变得混乱。由于组件类型在编译时是已知的,所以无论如何反射都是多余的。这可能是真的。在这种情况下,真的不需要反射。