Java 是否可以定义一个接受任意数量嵌套列表的方法?
我并不认为这有什么特别的用途,但是否可以编写一个方法,在Java中接受任意数量的嵌套列表 我做到了这一点:Java 是否可以定义一个接受任意数量嵌套列表的方法?,java,Java,我并不认为这有什么特别的用途,但是否可以编写一个方法,在Java中接受任意数量的嵌套列表 我做到了这一点: private <T extends List<? extends T>> void masterOfLists(final T list) { } private使用纯List在这里帮不了你,你需要定义一个递归类 作为一个额外的灵感来源,你可以看看我的代码 您可以创建类似以下内容的类: public class Recursive<T> {
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,但缺少泛型部分和更清晰的示例。请使用组合而不是继承!:)