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

Java中嵌套类的列表?

Java中嵌套类的列表?,java,list,nested,Java,List,Nested,有没有办法列出嵌套类对象 我这样定义了嵌套类: public class AB{ public class A { } public class B { } List<AB> listAB = new ArrayList<>(); AB.A objectA = AB.new A(); AB.B objectB = AB.new B(); listAB.add(objectA); listAB.add(objectB); 我想列这样的清

有没有办法列出嵌套类对象

我这样定义了嵌套类:

public class AB{

    public class A {    }

    public class B {    }
List<AB> listAB = new ArrayList<>();
AB.A objectA = AB.new A();
AB.B objectB = AB.new B();

listAB.add(objectA);
listAB.add(objectB);
我想列这样的清单:

public class AB{

    public class A {    }

    public class B {    }
List<AB> listAB = new ArrayList<>();
AB.A objectA = AB.new A();
AB.B objectB = AB.new B();

listAB.add(objectA);
listAB.add(objectB);
List listAB=new ArrayList();
AB.A objectA=AB.new A();
AB.B objectB=AB.new B();
添加(objectA);
添加(objectB);

谢谢大家!

将A和B作为AB的子类,并且A和B都应该是静态类

public class AB{

public static class A extends AB {    }

public static class B extends AB{    }
}
那么您的列表将起作用:

List<AB> listAB = new ArrayList<AB>();
AB.A objectA = AB.new A();
AB.B objectB = AB.new B();

listAB.add(objectA);
listAB.add(objectB);
List listAB=new ArrayList();
AB.A objectA=AB.new A();
AB.B objectB=AB.new B();
添加(objectA);
添加(objectB);

该语法不起作用。
A
B
都与
AB
不相关(也就是说,它们不能被指定来代替
AB
),即使它们是嵌套的

此外,如果声明不是
静态的
,您将无法访问封闭类之外的那些类

你应该做的是:

  • 将类声明更改为以下内容:

    public static class A extends AB { }
    public static class B extends AB { }
    
    …然后,我们看到
    A
    B
    都与
    AB
    相关(也就是说,它们可以被分配来代替
    AB

  • 更正
    AB.A
    AB.B
    的实例化调用:

    AB.A objectA = new AB.A();
    AB.B objectB = new AB.B();
    

然后,您可以毫无困难地添加到列表中。

我确实尝试过,但没有效果。我在询问其他可能性。嵌套类不是其容器的隐式子类型。但是子类型很糟糕,请使用接口:)不,因为它们是不同的类,如果您将
A
B
子类设置为
AB
我忘了将A和B类设置为静态的,那么子类型将起作用。刚刚修改了我的代码@马科托耶斯。因为这不是实例化这些对象的方式。谢谢!“static”解决了我这个$0字段的问题-我使用AB.A.class.getDeclaredField()获取嵌套类的所有字段,但我也得到了“this$0”,这给我带来了麻烦。