在Java语言中,我正在构建一个多维数据结构,其中包含格式为f(x_1,...,x_n)->y的函数的输出,然后将其转换为JSON,并将其传递回客户机进行处理。由于数据结构的深度取决于被计算函数的输入参数的数量(它也是n维的),所以我使用递归函数生成数据结构,递归函数传递给它一个参数列表,如果传递两个以上的参数,则生成一个列表,如果只传递一个参数,则生成一个双精度列表。生成列表的方法如下所示:
static private List buildList(List<String> parameters){
if(parameters.size() > 1){
List<List> returnList = new arrayList<List>;
//call buildList to generate contents of returnList;
return returnList;
} else {
List<Double> returnList = array of values generated by another method
return returnList;
}
}此方法由另一个方法调用,该方法获取输出列表,将其转换为JSON,并将其添加到响应对象中。
这种方法的问题是,由于我直到运行时才知道数据结构的维度,所以我不确定如何定义函数,因此不能处理和返回原始数据类型,如List和List<List>。理想情况下,我似乎应该为三维数据结构键入类似于List<List<List<Double>>>的返回值,但我不确定如何设置代码来执行此操作。我编写的Java代码不多,所以类型安全对我来说是一个相对陌生的概念,但我的印象是,在美妙的Java世界中,使用原始类型通常是不受欢迎的。
在这种递归模式中,有没有避免使用原始类型的最佳实践方法,或者我应该坚持我目前的方法?
发布于 2016-05-26 02:57:45
每个对象的父类都是object类。<Object>可以保留任何内容(List<List<List<Double>>>)。因此,每次声明List时,都要使用Object类型,它可以容纳任何对象。
发布于 2016-05-26 03:02:19
泛型(“尖括号”之间的东西)用于编译时类型安全检查。
如果在请求之前不知道给定列表的内容,那就没有意义了。
您可能最容易将列表输入为List<Object>。
另外,顺便提一下,假设你是java 7或更高版本,你可以更简单地声明impl:
List<Object> myList = new ArrayList<>();请注意ArrayList上的空<>。这意味着“每个声明的类型”。只会让你的代码更简洁一点。
https://stackoverflow.com/questions/37445255
复制相似问题