我对Java比较陌生。我想创建一个外部类的arraylist,并且对于arraylist的外部类的每个索引,我想要一个内部类的arraylist。
public Outerclass{
    //Code Here
    public InnerClass{
    //Code Here
    }
}
//My attempt at setting up the arrays
public ArrayList <Outerclass> olist;
public ArrayList <InnerClass> ilist;
 olist= new ArrayList<Outerclass>();
 for (int i = 0; i < 3; i++) {
      Outerclass c = new Outerclass ();
      ilist = new ArrayList<InnerClass>();
      for(int j = 0 ; j < 4; j++){
          InnerClass e = new InnerClass();
          ilist.add(e);
      }
      olist.add(c);
 }这样行得通吗?
发布于 2013-08-05 08:28:09
首先,我认为在你开始跑步之前,你应该学习如何走路:
public Outerclass应该是
public class Outerclass内部也是如此!
其次,所有代码的最后部分都应该在Ourclass中的main()方法中。
第三,不,你不能那样使用内部类,这就是为什么这些类是内部的。如果你想从main()内部或外部类外部使用内部类,你必须使用外部的实例来访问它们,就像访问任何其他实例成员一样-你不能直接访问它:
        Outerclass oc = new Outerclass();
        Outerclass.InnerClass in = oc.new InnerClass();发布于 2016-09-29 03:35:50
如果您有用于数据存储的嵌套类,则对答案#2稍加改进,意味着您有一个外部类的构造函数,该构造函数自动为内部类生成数量可变的数组成员,如树结构。这个解决方案实际上是一种变通方法,它使用一个已定义的成员- ArrayList -它可以在以后扩展,而不是在OuterClass中直接定义InnerClass[]数组,如果它不是静态的,就不会工作。
public class OuterClass
{
    private int NumberInnerClassInstances;       
    // ... other members of OuterClass
    ArrayList<InnerClass> innerClassInstances = new ArrayList<>();
    OuterClass( input vars ...)  {
        // calculate the NumberInnerClassInstances needed
        for(int i = 0 ; j < NumberInnerClassInstances; i++) {
            OuterClass.InnerClass in = this.new InnerClass(i);
            innerClassInstances.add(in);
        }
    }
    public class InnerClass
    {
        int icvar;
        InnerClass(int i) {
            //...construct the Inner Class Member #i
            // can access the members of OuterClass
        }
    }
}然后,您可以从外部使用get访问InnerClass实例:
oc = new OuterClass( vars ...)
var = oc.InnerClassInstances.get(i).icvar发布于 2013-08-05 08:20:52
以下是您的代码的关键行:
 Outerclass c = new Outerclass ();
     InnerClass e = new InnerClass();那行不通的。你会得到一个编译错误。
由于InnerClass是一个内部类,因此需要在其封闭类(即OuterClass)的一个实例的上下文中实例化它。如下所示:
 Outerclass c = new Outerclass ();
     InnerClass e = c.new InnerClass();c.new ...表单称为限定类实例创建表达式;请参见JLS 15.9。
备注:
new。InnerClass是static,这也是不必要的。但是InnerClass是一个嵌套类,而不是一个内部类。根据标准的Java terminology.https://stackoverflow.com/questions/18048808
复制相似问题