我是 Java 新手(有 C# 经验),
这就是我想要做的:
public final class MyClass
{
public class MyRelatedClass
{
...
}
}
public class OtherRandomClass
{
public void DoStuff()
{
MyRelatedClass data = new MyClass.MyRelatedClass();
}
}
这在 Eclipse 中给出了这个错误:
No enclosing instance of type BitmapEffects is accessible. Must qualify the allocation with an enclosing instance of type BitmapEffects (e.g. x.new A() where x is an instance of BitmapEffects).
这在使用静态类的 C# 中是可能的,在这里应该如何完成?
最佳答案
按照您定义 MyRelatedClass
的方式,您需要有 MyClass
的实例才能访问/实例化此类。
通常在 Java 中,当 MyRelatedClass
的实例需要访问 MyClass
实例的某些字段时(因此在编译器警告)。
像这样的东西应该编译:
public void doStuff() {
MyClass mc = new MyClass();
MyRelatedClass data = mc.new MyRelatedClass();
}
但是,如果 MyRelatedClass
实例不需要访问其封闭实例的字段(MyClass
的字段),那么您应该考虑定义 MyRelatedClass
作为静态类,这将允许您发布的原始代码进行编译。
嵌套类(您发布的内容)和静态嵌套类(类
中的静态类
)的区别在于前者,嵌套类属于父类的实例,而后者没有这种关系 - 只有逻辑/命名空间关系。
关于java - 如何从(静态)类中的类创建新的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039306/