开发者社区> 问答> 正文

Java-嵌套在类中的自定义类型

我再次要求技术支持。

我需要在一个类中定义一个自定义类型,我这样做是这样的:

public class MainClass {
    private class CustomType {
        public byte[] varA;
        public int varB;

        public CustomType() {
            varA = new byte[3];   
            varB = 13;
        }
    }

    private CustomType[] myArray;


    public MainClass() {
        myArray = new CustomType[1024]
        System.out.println(this.CustomType[0].varB);
    }
}

当我运行它抛出一个NullPointerException在System.out.println(this.CustomType[0].varB);

我已经测试过myArray是否正确地使用1024个元素进行了初始化,并且确实进行了初始化,但是我似乎无法访问它们。

我只是从C ++迁移到Java,所以我仍然习惯它,我是否缺少明显的东西?

问题来源:Stack Overflow

展开
收起
montos 2020-03-22 17:28:09 627 0
1 条回答
写回答
取消 提交回答
  • 两件事情,

    • 您必须实例化CustomType。
    • CustomType不需要访问,MainClass.this因此可以将其设为静态。 所以
    public class MainClass {
        private static class CustomType {
            public byte[] varA;
            public int varB;
    
            public CustomType() {
                varA = new byte[3];   
                varB = 13;
            }
        }
    
        private CustomType[] myArray;
    
    
        public MainClass() {
            myArray = new CustomType[1024];
            for (int i = 0; i < myArray.length; ++i) {
                this.CustomType[i] = new CustomType();
            }
            // Or
            Arrays.setAll(myArray, CustomType::new);
            System.out.println(this.CustomType[0].varB);
        }
    }
    

    不将其设置为静态会MainClass.this在每个CustomType实例中存储,这是不必要的开销。

    回答来源:Stack Overflow

    2020-03-22 17:29:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载