首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免递归定义的列表的原始类型?

如何避免递归定义的列表的原始类型?
EN

Stack Overflow用户
提问于 2016-05-26 02:44:19
回答 2查看 36关注 0票数 0

在Java语言中,我正在构建一个多维数据结构,其中包含格式为f(x_1,...,x_n)->y的函数的输出,然后将其转换为JSON,并将其传递回客户机进行处理。由于数据结构的深度取决于被计算函数的输入参数的数量(它也是n维的),所以我使用递归函数生成数据结构,递归函数传递给它一个参数列表,如果传递两个以上的参数,则生成一个列表,如果只传递一个参数,则生成一个双精度列表。生成列表的方法如下所示:

代码语言:javascript
复制
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,并将其添加到响应对象中。

这种方法的问题是,由于我直到运行时才知道数据结构的维度,所以我不确定如何定义函数,因此不能处理和返回原始数据类型,如ListList<List>。理想情况下,我似乎应该为三维数据结构键入类似于List<List<List<Double>>>的返回值,但我不确定如何设置代码来执行此操作。我编写的Java代码不多,所以类型安全对我来说是一个相对陌生的概念,但我的印象是,在美妙的Java世界中,使用原始类型通常是不受欢迎的。

在这种递归模式中,有没有避免使用原始类型的最佳实践方法,或者我应该坚持我目前的方法?

EN

回答 2

Stack Overflow用户

发布于 2016-05-26 02:57:45

每个对象的父类都是object类。<Object>可以保留任何内容(List<List<List<Double>>>)。因此,每次声明List时,都要使用Object类型,它可以容纳任何对象。

票数 1
EN

Stack Overflow用户

发布于 2016-05-26 03:02:19

泛型(“尖括号”之间的东西)用于编译时类型安全检查。

如果在请求之前不知道给定列表的内容,那就没有意义了。

您可能最容易将列表输入为List<Object>

另外,顺便提一下,假设你是java 7或更高版本,你可以更简单地声明impl:

代码语言:javascript
复制
List<Object> myList = new ArrayList<>();

请注意ArrayList上的空<>。这意味着“每个声明的类型”。只会让你的代码更简洁一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37445255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档