Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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_List_Multidimensional Array - Fatal编程技术网

Java多维多类型数组(映射/列表/集合)?

Java多维多类型数组(映射/列表/集合)?,java,list,multidimensional-array,Java,List,Multidimensional Array,我们有这样的声明: ArrayList参数集=新建ArrayList() 也许可以这样定义它(我知道,这是错误的,请将其视为伪代码): 列表参数集=新建 我很确定,有更好的方法来定义这样一个二维多类型“数组”。使用标准Java Collection API,您基本上可以做两件事: 在声明中使用List而不是ArrayList:List parameterSet=new ArrayList() 使用菱形运算符(如果您使用的是Java 7+):List parameterSet=new ArrayL

我们有这样的声明:

ArrayList参数集=新建ArrayList()

也许可以这样定义它(我知道,这是错误的,请将其视为伪代码):

列表参数集=新建


我很确定,有更好的方法来定义这样一个二维多类型“数组”。

使用标准Java Collection API,您基本上可以做两件事:

  • 在声明中使用
    List
    而不是
    ArrayList
    List parameterSet=new ArrayList()
  • 使用菱形运算符(如果您使用的是Java 7+):
    List parameterSet=new ArrayList()

  • 但是,在这种情况下,我会考虑定义一个封装复杂数据结构的类(map map)。

    这里的问题不是维度而是“多类型”。

    要么为元素找到一个通用的超类型(最后一种方法总是
    对象
    ),要么创建一个包装类,该类可以容纳您需要的任何类型

    List<Object> 
    
    更精确的是包装器类

    public class Wrapper<T>  {
         private T data;
    
         // constructors can be nice
         public Wrapper(Float f){this.data=f;}
         public Wrapper(Double d){this.data=d;}
         public Wrapper(String s){this.data=s;}
    
         public void setData(T newData) {
             data = newData;
         }
    
         public T getData() {
             return data;
         }
    
         // you can add convenience methods to find out what type your wrapper holds
         public boolean isString(){
             return this.data instanceof String;  // for example
         }
    
         // and also convenience methods to "cast" your data 
         public Float asFloat(){
            return (Float) this.data;
         }
    }
    
    List<Wrapper> list = new ArrayList<>();
    list.add(new Wrapper<Float>(1.2f));
    

    Thx,看起来不错,但也“复杂”。我希望有一个单线解决方案。尽管如此,我们似乎必须走这条路。你说得对,这远非一条航线。但至少你可以把“复杂”的东西放在一个地方。嗯,这不是真正的问题。。还是我没有正确理解你的答案?我正在寻找一个没有第二张“地图”的解决方案。
    List<Wrapper> list = new ArrayList<>();
    list.add(new Wrapper<Float>(1.2f));
    
    if(list.get(i).isFloat()){
      Float f = list.get(i).asFloat();
    }