【问题标题】:I need an array or ArrayList that accepts objects of any type我需要一个接受任何类型对象的数组或 ArrayList
【发布时间】: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>>();

标签: java arrays methods arraylist


【解决方案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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多