java - 如何从(静态)类中的类创建新的类实例?

标签 java

我是 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/

相关文章:

java - 无法使用 Intellij IDEA 运行 Java 代码(通过打开项目)

Java Double Format即使为零也显示2个小数点

java - 如何按属性对对象数组列表进行排序?

java - 我是否必须在主类中编写每个方法才能使用它(策略模式)?

java - 我的 EJB3 设计中的明显缺陷

java - 使用 Java 运行 shell 脚本将文件复制到 docker 返回错误

Java - 如何为文本字段创建循环?

java - 为什么 Android 类加载器允许从另一个包反射访问包私有(private)类的公共(public)字段?

java - JPA 中的三角函数

java - 在java中混合图像