0

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

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

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

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

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

但我收到错误:

没有封闭的类型实例是可访问的。必须使用 ClassName 类型的封闭实例来限定分配(例如 xnew A(),其中 x 是 ClassName 的实例)。

我怎样才能做到这一点?

4

4 回答 4

1

static如果该类不依赖于封闭实例,则要声明该类:

 private static class Viscosity

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

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

于 2013-09-15T00:55:53.963 回答
1

你应该:

  • 使 Viscocity 成为非内部类。在它自己的文件中声明它,除非你有一个非常有说服力的理由让它成为一个内部类(你还没有给我们做)。
  • 将其构造函数公开。
于 2013-09-15T00:58:57.637 回答
0

您的内部类是否需要访问封闭类的任何成员?如果没有,您可以将其设为静态类。

private static class Viscosity {
...
于 2013-09-15T00:55:20.960 回答
0

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

Outer out = new Outer() 

然后使用这个对象来创建它的内部类的实例,比如

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

但是为了能够做到这一点,您的内部类及其构造函数必须可以在您尝试调用此代码的地方访问。

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

于 2013-09-15T01:20:04.460 回答