Java 扩展超类的子类如何调用父类的生成器

Java 扩展超类的子类如何调用父类的生成器,java,Java,我有一个像这样的家长班 class A{ //Constructors only called by builder. public static class builder{ //builder code. } } Class B Extends ClassA{ //constrctor } 现在如果我在我的测试中 final classA dempClassA = new ClassB("parameters here"); 我现在怎么打电

我有一个像这样的家长班

 class A{

    //Constructors only called by builder.

 public static class builder{
   //builder code.
   }
 }

 Class B Extends ClassA{
    //constrctor

 }
现在如果我在我的测试中

 final classA dempClassA = new ClassB("parameters here");
我现在怎么打电话给建筑商


对不起,伙计们,生成器是一个类……我的错误。

如果您想从
a
类之外调用该方法,那么它不应该是私有的

如果您只是想让它成为
B
创建过程的一部分,那么您应该执行以下操作:

class B extends A {

  public B() {
    super(); // invokes A's constructor
  }
}

class A {
  public A(){
    // use builder() here
  }
}
ClassA tempClassA = new ClassB("parameters here") {
    {  
       // This block is called during construction
       builder(); 
    }
};

由于
builder
(这是一个类吗?还是缺少返回类型?)是静态的,您可以像
a.builder()
那样调用它。要使其可见,您不应将其设置为私有:)

编辑:因为它是一个类,所以有几种可能性:

  • 如果需要新实例,请调用
    new a.builder(…)
  • 如果builder提供静态方法(在这种情况下,问题是为什么这是一个类),则调用
    a.builder.someStaticMethod(…)

使ClassA的
builder
方法
protected
(而不是
private
),使它们对ClassB可见,然后使用匿名类调用它,如下所示:

class B extends A {

  public B() {
    super(); // invokes A's constructor
  }
}

class A {
  public A(){
    // use builder() here
  }
}
ClassA tempClassA = new ClassB("parameters here") {
    {  
       // This block is called during construction
       builder(); 
    }
};

如果我能很好地理解你想说的话,你会遇到以下情况:

public class ClassA {

    // Constructors only called by builder.

    public static class Builder {
        // builder code.
        public static void hello() {
            System.out.println("Hello");
        }

        public void hello1() {
            System.out.println("Hello1");
        }
    }
}
您可以通过以下方式访问它:

class ClassB extends ClassA {
    public static void main(String[] args) {

        ClassA.Builder.hello();
        ClassA.Builder builder = new Builder();
        builder.hello1();

    }
}

我不能想象一个真实的场景,我真的想用这样的东西真的吗?我总是这样做。特别是当用静态值填充映射时,我在匿名实例块中调用put(),以便在构造过程中填充它。是的,映射确实很有用(有时),但我从未想过在代码中使用这些东西。。。我想这是一个品味的问题,我通常只会用这种代码作为测试代码,这就是这个问题。在测试代码时,你可以做任何你喜欢的事情,只要真正的代码是干净的。对不起,它是一个类。我正在尝试实现构建器模式。你是问构建器类是否知道子类?如果是这样,那么糟糕的设计:类不应该引用它们的子类。考虑将Builder类移动到它自己的顶层类中。