Java:在main函数中创建新的自定义对象?

时间:2013-09-15 00:53:37

标签: java object private

我在一个类中创建了一个对象:

private class Viscosity{
    float magnitude;
    private Viscosity(float Magnitude){
        magnitude = Magnitude;
    }
}

在我的main函数中,我尝试从文本文件中提取数据并创建一个新的Viscosity对象,但似乎我无法访问此私有对象。

例如,我想将其添加到对象列表中:

listofObjects.add(new Viscosity(50.0f));

但我收到错误:

  

无法访问封闭的类型实例。必须使用ClassName类型的封闭实例限定分配(例如x.new A(),其中x是ClassName的实例)。

我该如何做到这一点?

4 个答案:

答案 0 :(得分:1)

如果它不依赖于封闭的实例,您希望声明该类static

 private static class Viscosity

或者,不是从静态main方法调用它,而是创建外部类的实例并将代码移动到实例方法中。

但是,真的,为什么这必须是一个内在阶级?为什么不是常规(包私有)类。如果你真的想要,你甚至可以在同一个文件中声明它(但这也不是真的可取)。

答案 1 :(得分:1)

你应该:

  • 使Viscocity成为非内部类。在它自己的文件中声明它,除非你有一个非常令人信服的理由使它成为一个内部类(你还没有向我们提供)。
  • 将其构造函数设为公开。

答案 2 :(得分:0)

您的内部类是否需要访问封闭类的任何成员?如果没有,你可以把它变成静态类。

private static class Viscosity {
...

答案 3 :(得分:0)

您可以将非静态嵌套类视为其外部类的member,因此您只能通过外部类的实例(封闭)来使用它。通常,您将需要创建一些外部类实例,如`

Outer out = new Outer() 

然后使用此对象创建其内部类的实例,如

Outer.Inner inner = out.new Inner(). 

但是为了能够做到这一点,你的内部类及其构造函数必须在你试图调用这段代码时可以访问。

new Inner()类的非静态方法中仅使用Outer没有问题,因为它将转换为this.new Inner()并且this引用包含{的当前实例{1}}上课 但是静态方法存在问题,因为它们内部没有Outer,或者this可能包含错误的实例,例如,如果您在类中调用this而不扩展new Inner() }。