Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 - Fatal编程技术网

Java 是否可以定义一个接受任意数量嵌套列表的方法?

Java 是否可以定义一个接受任意数量嵌套列表的方法?,java,Java,我并不认为这有什么特别的用途,但是否可以编写一个方法,在Java中接受任意数量的嵌套列表 我做到了这一点: private <T extends List<? extends T>> void masterOfLists(final T list) { } private使用纯List在这里帮不了你,你需要定义一个递归类 作为一个额外的灵感来源,你可以看看我的代码 您可以创建类似以下内容的类: public class Recursive<T> {

我并不认为这有什么特别的用途,但是否可以编写一个方法,在Java中接受任意数量的嵌套列表

我做到了这一点:

private <T extends List<? extends T>> void masterOfLists(final T list) {

}

private使用纯
List
在这里帮不了你,你需要定义一个递归类

作为一个额外的灵感来源,你可以看看我的代码

您可以创建类似以下内容的类:

public class Recursive<T> {
    List<Recursive<T>> sub;
    T value;

    boolean hasSub() {
        return sub != null;
    }
    T getValue() {
        return value;
    }
    void forEach(Consumer<T> t) {
        if (hasSub())
            sub.forEach(t);
        else t.accept(value);
    }
}
private <T> void masterOfLists(final Recursive<T> list) {
公共类递归{
列表子节点;
T值;
布尔hasSub(){
返回sub!=null;
}
T getValue(){
返回值;
}
无效forEach(消费者t){
if(hasSub())
副主席(t);
否则t.接受(价值);
}
}
您可以在这个类中使用逻辑,使用构造函数和/或setter防止它同时具有子列表和实际值

然后,如果您想迭代它并递归地打印出所有子项,您可以使用

Recursive<T> recursive;
recursive.forEach(System.out::println);
递归;
recursive.forEach(System.out::println);
然后,您的方法可以如下所示:

public class Recursive<T> {
    List<Recursive<T>> sub;
    T value;

    boolean hasSub() {
        return sub != null;
    }
    T getValue() {
        return value;
    }
    void forEach(Consumer<T> t) {
        if (hasSub())
            sub.forEach(t);
        else t.accept(value);
    }
}
private <T> void masterOfLists(final Recursive<T> list) {
private void主列表(最终递归列表){

使用纯
列表
s不会有任何效果,因为列表的泛型类型在运行时不可用,泛型在这里只会给您造成混乱。使用递归类要容易得多。

廉价的解决方案是用您自己的名称扩展ArrayList类,并强制在子类上使用泛型。子类仍然是ArrayList…:

public class NestingList extends ArrayList<NestingList> {

    // all we do is set the Generics...

}
公共类嵌套列表扩展了ArrayList{
//我们所做的就是设置泛型。。。
}

所以,你不知道列表的深度,但你想将其限制在最大深度还是什么?@Smutje我不想将其限制在特定的最大深度,我只希望它是有限的。你的意思是“最里面的列表不应该包含列表”-但这不是强制性的,因为如何编写一个无限嵌套列表?@Smutje你说得对。我不相信创建一个无限嵌套列表是可能的。我不想告诉你,但是你必须丢失泛型。如果你让它接受
ArrayList
,那么你已经有了。@Kent你的解决方案有一个很好的start,但缺少泛型部分和更清晰的示例。请使用组合而不是继承!:)