我需要一个接受任何类型对象的数组或 ArrayList

     2023-02-23     48

关键词:

【中文标题】我需要一个接受任何类型对象的数组或 ArrayList【英文标题】:I need an array or ArrayList that accepts objects of any type 【发布时间】:2013-12-06 15:21:55 【问题描述】:

我需要在 Java 中创建一个可以接受任意数量的任意类型数组的方法。我需要知道这是否可行,如果可以,怎么办?

【问题讨论】:

任意数量的数组是什么意思? 只需使用ArrayList list = new ArrayList(); 这与ArrayList<Object> list = new ArrayList<>(); 相同,它接受任何类作为输入。 接受数组,并使它们的长度都是最长的。我的想法是采用 Array of Object 数组,但我不确定这是否可行 您可以通过将第一个 List 设为 List 类型来创建二维 ArrayList,如下所示:List<List<Object>> myList = new ArrayList<List<Object>>(); 【参考方案1】:
List<Object> array = new ArrayList<Object>();

每个类都是对象类型,所以应该这样做。

【讨论】:

这个效果最好。回家后我会选择最好的,但现在我必须走了。编辑:感谢您的帮助。【参考方案2】:

您可以像这样创建一个接受任何类型数组的方法:

public <T> void MyMethod(List<T> mylist)
    System.out.println(mylist);

【讨论】:

但这仅适用于泛型类,并且只接受 T 引用的类的列表。 我误解了他的问题,但感谢您指出。【参考方案3】:

要回答您问题的标题,

对象是所有对象的超集。因此,您可以通过创建 Object 类型的数组来实现它。您可以在该数组中插入任何类型。

例如。

ArrayList<Object> list = new ArrayList<Object();

要回答您的问题,即创建一个可以接受任意数量的任意类型数组的方法,请使用变量参数。

例如。

public void method(Object ... params)  <your code>    

// This method will accept any number of parameters of any type.
// If it is specific to ArrayLists, use ArrayList<Object> as the parameter type.

【讨论】:

【参考方案4】:

接受数组,并使它们成为最长的数组的长度

ArrayList of arrays 是一个很好的方法。 Arrays.copyOf 用 null 填充较短的数组

void f(ArrayList<Object[]> list)
        int maxLen = 0;
        for(int i=0;i<list.size();i++)
            maxLen = Math.max(maxLen, list.get(i).length);
        

        for(int i=0;i<list.size();i++)
            if(list.get(i).length < maxLen)
            list.set(i, Arrays.copyOf(list.get(i), maxLen));
        
    

【讨论】:

【参考方案5】:

由于所有数组都是对象,因此您可以使该方法采用 Object 的可变参数。以下是如何按字面意思做你被问到的事情。如果排除基元数组(强制包装器类型,如Integer[]Boolean[]),这可能会有所简化,因此参数为Object[]...。那么你就不需要反射和大长 if/else 块并且可以返回List&lt;Object[]&gt;。在那种情况下,该方法会短得多。否则这种事情很不方便。

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public static List<Object> conform(Object... arrays) 
    ArrayList<Object> out = new ArrayList<Object>(arrays.length);

    int longest = 0;
    for (Object a : arrays) 
        if (!a.getClass().isArray()) 
            throw new IllegalArgumentException(a + " not an array");
        
        int length = Array.getLength(a);
        if (length > longest) longest = length;
    

    for (Object a : arrays) 
        if (a instanceof Object[]) 
            out.add(Arrays.copyOf((Object[])a, longest));

         else if (a instanceof boolean[]) 
            out.add(Arrays.copyOf((boolean[])a, longest));

         else if (a instanceof char[]) 
            out.add(Arrays.copyOf((char[])a, longest));

         else if (a instanceof byte[]) 
            out.add(Arrays.copyOf((byte[])a, longest));

         else if (a instanceof short[]) 
            out.add(Arrays.copyOf((short[])a, longest));

         else if (a instanceof int[]) 
            out.add(Arrays.copyOf((int[])a, longest));

         else if (a instanceof long[]) 
            out.add(Arrays.copyOf((long[])a, longest));

         else if (a instanceof float[]) 
            out.add(Arrays.copyOf((float[])a, longest));

         else if (a instanceof double[]) 
            out.add(Arrays.copyOf((double[])a, longest));
        
    

    return out;

【讨论】:

定义一个接受 Spark DataFrame 中对象数组的 UDF?

...】:2016-08-1721:11:23【问题描述】:使用Spark的DataFrame时,需要使用用户定义函数(UDF)来映射列中的数据。UDF要求显式指定参数类型。就我而言,我需要操作由对象数组组成的列,但我不知道要使用什么类型。这是一 查看详情

定义一个接受 Spark DataFrame 中对象数组的 UDF?

...】:2016-08-1721:11:23【问题描述】:使用Spark的DataFrame时,需要使用用户定义函数(UDF)来映射列中的数据。UDF要求显式指定参数类型。就我而言,我需要操作由对象数组组成的列,但我不知道要使用什么类型。这是一 查看详情

我如何表明一个函数可以接受除字典之外的任何可迭代对象?

】我如何表明一个函数可以接受除字典之外的任何可迭代对象?【英文标题】:HowwouldIindicatethatafunctiontakesanyiterableexceptadictionary?【发布时间】:2019-07-2601:39:06【问题描述】:我有一个可以接受Iterable[int]的函数,但我不想接受字... 查看详情

数组arraylistlist的区别

...容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或List<T>的容量可根据需要自动扩充、修改、删除或插入数据。   数组可以具有多个维度,而ArrayList或List<T>始终只具有一个维度。但是,您可以... 查看详情

类型提示:方法应该接受任何作为对象的 $art

...sanobject【发布时间】:2011-05-1205:55:42【问题描述】:我有一个类\'Collection\',它有一个add方法。add方法应该只接受对象。所以这是期望的行为:$x=5;//arbitrarynon-object$obj=newFoo;//arbitraryobjec 查看详情

如何声明一个接受任何类型 Function<> 的方法引用的变量

】如何声明一个接受任何类型Function<>的方法引用的变量【英文标题】:HowtodeclareavariablethatacceptsmethodreferenceofanytypeFunction<>【发布时间】:2021-08-3012:34:35【问题描述】:我正在尝试声明一个接受任何类型的方法引用的变... 查看详情

接受任何类型的可调用并且知道参数类型

...我不确定这是否可能,所以这就是我想知道的。我想创建一个接受任何类型的仿函数/可调用对象的函数,但我想知道参数类型是什么。(但不强制执行)所以,这个捕获了所有但没有给我参数的类型:template<typenameT>vo 查看详情

从对象访问 Array(任何元素类型)的元素

...典数组。我的应用程序在listview控件中显示属性;所以我需要将所有属性值转换为简单的字符串Dictionary<string,strin 查看详情

java数组作为参数传入函数怎么让他不变化

...一个数组,那么方法也就可以返回一个数组,则此时,只需要在返回值类型声明处明确的写出返回的数组类型即可。数组可以作为方法的参数。当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值返回... 查看详情

数组的常用扩展

... 2.数组去重  简单值类型  数组型对象类型:根据某一个健名匹配重复项并去重3.any:对数组的每一项运行给定函数, 返回改函数匹配条件为true的项每次调用的结果组成的数组4.数组分组  数组型对象类型:根据某一个健... 查看详情

如何使用任何东西在数组或字典中查找对象

...前在objective-c上,我不能使用struct等。请有人帮助我,我需要在NSArray中找到价值(或者如果这很容易,我可以将其更改为NSDictionary)。I\'vegotNSArray有4个类似的字典。 查看详情

jQuery .data(),需要接受数组元素作为键或找到替代(JSON?)

】jQuery.data(),需要接受数组元素作为键或找到替代(JSON?)【英文标题】:jQuery.data(),needtoacceptarrayelementsaskeyorfindalternative(JSON?)【发布时间】:2013-03-0204:53:27【问题描述】:感谢您查看我的帖子。我正在为Youtube视频构建一个基... 查看详情

如何制作一个接受任何对象的 swiftui viewmodifier?

】如何制作一个接受任何对象的swiftuiviewmodifier?【英文标题】:howdoImakeaswiftuiviewmodifierthatacceptsanyobject?【发布时间】:2021-05-3115:36:37【问题描述】:我的项目中有很多可重复使用的视图修改器,但我从来没有能够制作一个接受... 查看详情

我需要从 pandas DataFrame 对象中创建一个 python 列表对象或任何对象,对来自不同行的值进行分组

】我需要从pandasDataFrame对象中创建一个python列表对象或任何对象,对来自不同行的值进行分组【英文标题】:Ineedtocreateapythonlistobject,oranyobject,outofapandasDataFrameobjectgroupingpiecesofvaluesfromdifferentrows【发布时间】:2017-12-1222:33:18【问... 查看详情

如何创建一个从管道和命令行接受多种参数类型的函数?

】如何创建一个从管道和命令行接受多种参数类型的函数?【英文标题】:HowdoIcreateafunctionthatacceptsmultipleargumenttypesfrompipelineandcommandline?【发布时间】:2012-04-1008:09:25【问题描述】:我正在尝试编写一个带有多个参数的函数,这... 查看详情

numpy学习(让数据处理变简单)(代码片段)

...象(称为dtype)。从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的Python对象表示。  它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0) ... 查看详情

动态分配对象数组,如 int

...016-04-2005:22:26【问题描述】:为了动态创建ints的数组,我需要做int*a=newint[20];。是否有类似的方法来创建对象或结构数组?例如,我需要一个动态分配的classA对象数组,我应该如何声明它(语法)?每个对象会调用什么构造函数... 查看详情

Scala:无法将数组传递给需要 Seq 或 Iterable 的函数

】Scala:无法将数组传递给需要Seq或Iterable的函数【英文标题】:Scala:Can\'tpassanArraytoafunctionwhereSeqorIterableisexpected【发布时间】:2021-09-0517:53:31【问题描述】:我正在尝试编写一个通用函数,它接受一个类型参数T,它是Seq[String]的... 查看详情