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(…)
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类移动到它自己的顶层类中。