首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有外部类和内部类的数组

具有外部类和内部类的数组
EN

Stack Overflow用户
提问于 2013-08-05 07:51:08
回答 5查看 3.9K关注 0票数 1

我对Java比较陌生。我想创建一个外部类的arraylist,并且对于arraylist的外部类的每个索引,我想要一个内部类的arraylist。

代码语言:javascript
运行
复制
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);
 }

这样行得通吗?

EN

回答 5

Stack Overflow用户

发布于 2013-08-05 08:28:09

首先,我认为在你开始跑步之前,你应该学习如何走路:

代码语言:javascript
运行
复制
public Outerclass

应该是

代码语言:javascript
运行
复制
public class Outerclass

内部也是如此!

其次,所有代码的最后部分都应该在Ourclass中的main()方法中。

第三,不,你不能那样使用内部类,这就是为什么这些类是内部的。如果你想从main()内部或外部类外部使用内部类,你必须使用外部的实例来访问它们,就像访问任何其他实例成员一样-你不能直接访问它:

代码语言:javascript
运行
复制
        Outerclass oc = new Outerclass();
        Outerclass.InnerClass in = oc.new InnerClass();
票数 1
EN

Stack Overflow用户

发布于 2016-09-29 03:35:50

如果您有用于数据存储的嵌套类,则对答案#2稍加改进,意味着您有一个外部类的构造函数,该构造函数自动为内部类生成数量可变的数组成员,如树结构。这个解决方案实际上是一种变通方法,它使用一个已定义的成员- ArrayList -它可以在以后扩展,而不是在OuterClass中直接定义InnerClass[]数组,如果它不是静态的,就不会工作。

代码语言:javascript
运行
复制
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实例:

代码语言:javascript
运行
复制
oc = new OuterClass( vars ...)
var = oc.InnerClassInstances.get(i).icvar
票数 1
EN

Stack Overflow用户

发布于 2013-08-05 08:20:52

以下是您的代码的关键行:

代码语言:javascript
运行
复制
 Outerclass c = new Outerclass ();

     InnerClass e = new InnerClass();

那行不通的。你会得到一个编译错误。

由于InnerClass是一个内部类,因此需要在其封闭类(即OuterClass)的一个实例的上下文中实例化它。如下所示:

代码语言:javascript
运行
复制
 Outerclass c = new Outerclass ();

     InnerClass e = c.new InnerClass();

c.new ...表单称为限定类实例创建表达式;请参见JLS 15.9

备注:

  1. 如果创建内部类的代码是在外部类的实例的上下文中(例如,它在外部类的实例方法中),那么你不需要这样限定new
  2. 如果InnerClassstatic,这也是不必要的。但是InnerClass是一个嵌套类,而不是一个内部类。根据标准的Java terminology.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18048808

复制
相关文章

相似问题

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