我在一个类中创建了一个对象:
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的实例)。
我该如何做到这一点?
答案 0 :(得分:1)
如果它不依赖于封闭的实例,您希望声明该类static
:
private static class Viscosity
或者,不是从静态main方法调用它,而是创建外部类的实例并将代码移动到实例方法中。
但是,真的,为什么这必须是一个内在阶级?为什么不是常规(包私有)类。如果你真的想要,你甚至可以在同一个文件中声明它(但这也不是真的可取)。
答案 1 :(得分:1)
你应该:
答案 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()
}。