如何实例化嵌套的私有静态类java

时间:2016-05-25 06:00:08

标签: java

假设我有一些嵌套类

class A{
  private static class B{}
  static class C{ 
    B b;
    C(B b){
        this.b=b;
    }
    int foo(){
        return 42;
    }
  }
} 

我试图通过执行以下操作来实例化私有静态类B

new A.C(new A.B())

但由于B是私人的,我无法做到这一点。 用B类构造C类的方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以B非私密,也可以在A中提供辅助方法来创建C

class A{
  private static class B{}
  static class C{ 
    B b;
    C(B b){
        this.b=b;
    }
    int foo(){
        return 42;
    }
  }
  static createC() {
    return new C(new B());
  }
} 

因此,在A之外,您可以像这样创建C的实例:

A.C myc = A.create();

请注意,由于B在外部不可见,因此C的构造函数无用,因此您可以将其设为私有。

答案 1 :(得分:-2)

如果您只是想进行测试并绕过断言错误,那么您可以使用 b 的空值实例化 c,然后创建一个匿名类并覆盖 foo。

new A.C(null){int foo(){return 42;}}